Activity/Service的生命周期

Android Activity/Service 生命周期介绍

Activity的生命周期

1.Activity生命周期图

生命周期

2.Activity生命周期相关方法

Activity继承了ApplicationContext,可以重写方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}

通过重写,存为:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ActivityDemo extends Activity {
private static final String TAG = "ActivityDemo";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e(TAG, "start onCreate~~~");
}
@Override
protected void onStart() {
super.onStart();
Log.e(TAG, "start onStart~~~");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e(TAG, "start onRestart~~~");
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "start onResume~~~");
}
@Override
protected void onPause() {
super.onPause();
Log.e(TAG, "start onPause~~~");
}
@Override
protected void onStop() {
super.onStop();
Log.e(TAG, "start onStop~~~");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "start onDestroy~~~");
}
}

3.相关操作的的生命周期流程

3.1 启动Activity

启动
onCreate()->onStart()->onResume

3.2 按BACK键:

按返回键
onPause()->onStop()->onDestory()

3.3 按HOME键:

按Home键
onPause()->onStop()

3.4 从3.3操作后,从桌面进入ActivityDemo:

onRestart()->onStart()->onResume()

4.关于其他

如果用户将当前的App切换为其他App,就可能会导致当前App被杀掉。所以在某些比较重要的Activity中需要做好保存数据的操作。避免Activity被系统回收,再次进入时是非正确的状态。这里需要关注Activity另外两个比较重要的方法,onSaveInstanceState()与onRestoreInstanceState(); 相关链接


Service的生命周期

1.Service的概念及用途

Service与Activity不同,他是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,仍在后台运行。

2.Service的生命周期

生命周期图:
Service生命周期

2.1使用context.startService() 启动Service

其生命周期为context.startService() ->onCreate()- >onStart()->onStartCommand()->Service running–>(如果调用context.stopService() )->onDestroy() ->Service shut down

如果Service还没有运行,则android先调用onCreate()然后调用onStart(); 如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。

onStartCommand()可以接收在前台startService传入的Intent参数。

调用stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。
该Service的调用者再启动起来后可以通过stopService关闭Service。

所以调用startService的生命周期为:onCreate –> onStart(可多次调用) –> onDestroy

2.2对于bindService()启动Service会经历:

context.bindService()->onCreate()->onBind()->Service running–>onUnbind() -> onDestroy() ->Service stop

onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。
这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,
Srevice就会调用onUnbind->onDestroy相应退出。

所以调用bindService的生命周期为:onCreate –> onBind(只一次,不可多次绑定) –> onUnbind –> onDestory。
一但销毁activity它就结束,如果按home把它放到后台,那他就不退出。

PS:
在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。