Android线程和进程

基础

程序的执行流程

程序的主入口一般是从main函数开始,而main函数执行步骤如下

  1. 初始化
  2. 进入死循环
  3. 程序退出

    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