Looper.java分析

Looper在Android线程通信中扮演关键角色,与Handler、MessageQueue构成通讯机制。通常在ActivityThread的main方法中由系统初始化。prepare()方法创建线程局部的Looper实例,并通过JNI调用nativeInit初始化MessageQueue。loop()方法启动消息循环,Looper负责处理实际的通讯操作,如pollOnce、wake和setFDEvents等,采用TLS保证多线程安全。
摘要由CSDN通过智能技术生成

Looper作为Android中线程间通讯的核心,起着至关重要的作用。它与Handler,MessageQueue一起封装了一套完整的通讯机制。

在调用Looper时,需要先执行prepare() 接着就可以loop()开始接收消息了。我们从来没有在应用的主线程中调用prepare()是因为在ActivityThread的main方法中

public static void main(String[] args) {
        ...

        Looper.prepareMainLooper();

        ActivityThread thread = new ActivityThread();
        thread.attach(false);

        if (sMainThreadHandler == null) {
            sMainThreadHandler = thread.getHandler();
        }

        if (false) {
            Looper.myLooper().setMessageLogging(new
                    LogPrinter(Log.DEBUG, "ActivityThread"));
        }

        // End of event ActivityThreadMain.
        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
        Looper.loop();

        throw new RuntimeException("Main thread loop unexpectedly exited");
    }

系统

android.os.strictmode.DiskReadViolation at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1596) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:249) at libcore.io.ForwardingOs.open(ForwardingOs.java:166) at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7844) at libcore.io.MemoryMappedFile.mmapRO(MemoryMappedFile.java:54) at libcore.timezone.ZoneInfoDb.loadData(ZoneInfoDb.java:185) at libcore.timezone.ZoneInfoDb.loadTzDataWithFallback(ZoneInfoDb.java:119) at libcore.timezone.ZoneInfoDb.<clinit>(ZoneInfoDb.java:46) at java.util.TimeZone.getTimeZone(TimeZone.java:579) at java.util.TimeZone.getDefaultRef(TimeZone.java:724) at java.util.TimeZone.getDefault(TimeZone.java:700) at java.text.SimpleDateFormat.initializeCalendar(SimpleDateFormat.java:743) at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:687) at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:666) at com.hryt.remoter.uimce.app.CrashHandler.<init>(CrashHandler.java:53) at com.hryt.remoter.uimce.app.CrashHandler.<clinit>(CrashHandler.java:49) at com.hryt.remoter.uimce.app.CrashHandler.getInstance(CrashHandler.java:65) at com.hryt.remoter.uimce.app.RemoterApplication.onCreate(RemoterApplication.java:32) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7013) at android.app.ActivityThread.access$1300(ActivityThread.java:238) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1921) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7958) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:603) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
最新发布
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值