Android线程和进程
基础
程序的执行流程
程序的主入口一般是从main函数开始,而main函数执行步骤如下
- 初始化
- 进入死循环
- 程序退出
Android程序
Android IDE提供创建非main开始创建Android工程,同时为我们创建了工程模板,使我们更专注UI上的开发
安照mainfest的层次结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/gdt_file_path" /> </provider> <service android:name="${applicationId}.DownloadService" android:exported="false"/> <activity android:name="${applicationId}.ADActivity"/> </application>
|
可以看出来,Android四大组件在Application标签里面,Android四大组件是Application的零件
Handler,Message,MessageQueue,Looper
这四者的关系,常常是剪不断,理还乱
最开始我们只是用到Message和Handler最多,一般是在类里面创建一个Handler,让这个Handler发送消息,在重写的handleMessage处理消息,但是消息是发送到哪,消息又是怎么分发到指定的Handler,Android的消息体系又是怎么的,模模糊糊,似懂非懂,很让人难受,这四个对象大致功能如下图
[各自功能][/Users/chengfangming/git/cfm880.github.io/source/_posts/image/0806/QQ20170812-160827@2x.png]
但是仔细整理可以发现,Looper负责冲MessageQueue中获得消息,而Handler负责处理和分发消息
Handler
源文件:frameworks/base/core/java/android/os/Handler.java
Handler和Thread的关系
每一个Thread只对应一个Looper.
每一个Looper只对应一个MessageQueue.
每个MessageQueue中有N个Message
每个Message最多交由一个Handler来处理
Handler作用
处理Message
将Message压入MessageQueue
实现处理消息的赛事
1 2
| public void handleMessage(Mesage msg); public void dispatchMessage(Message msg);
|
http://www.uml.org.cn/oobject/201104212.asp