Android四大组件之Activity,Activity生命周期
2017-03-16 17:25
471 查看
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。
Activity作为四大组件之一,其生命周期也就是它所在的进程的生命周期。Activity生命周期需要深入理解,后续的开发和调试都会使用到。
一、 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
下图是一张经典的Activity生命周期流程图
1、onCreate()当第一次调用一个Activity就会执行
2、onStart()表示当前的Activity处于可见状态
3、onResume()表示当Activity可以得到用户焦点
4、onPause()表示当前Activity被遮挡,即使其用户焦点
5、onStop()表示当前Activity不可见
6、 onDestory()表示当前的activity被销毁
7、 当Activity没有被销毁的时候重新调用这个Activity就会调用onRestart方法
根据官方给出的说明,可以清楚的知道,在什么状态下,应该处理那些事件。即那些事件放在哪个状态下处理是合适的。
二、为了加深对Activity生命周期的认知,需要看下在多个Activity的时候,对应的生命周期的信息。
例如,我们在第一个Activity里面,通过点击button按钮来启动第二个Activity。
第二个Activity的部分
对应的AndroidManifest.xml的配置
1、当我们启动一个Activity的时候,输出的log如下
2、当我们按返回键退出第一个应用的时候,输出log如下
退出应用的时候,分别先后调用了onPause() OnStop() onDestroy()
3、第一个应用启动到第二个应用的时候,输出log如下:
第二个应用的onCreate(创建) onStart(可见) onResume(可以获取焦点)。
当第二个应用onResume()可以获取焦点的时候,在把第一个应用onStop()不可见
4、从第二个应用返回第一个应用,输出log如下:
先是第二个应用的onPause,失去焦点。
第一个应用被重新唤醒 onRestart, onStart可见,onResume可以获取焦点
然后才是第二个应用的onStop不可见,被销毁ondestory
附件:Demo对应的Sorce
Code
Activity作为四大组件之一,其生命周期也就是它所在的进程的生命周期。Activity生命周期需要深入理解,后续的开发和调试都会使用到。
一、 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
下图是一张经典的Activity生命周期流程图
1、onCreate()当第一次调用一个Activity就会执行
2、onStart()表示当前的Activity处于可见状态
3、onResume()表示当Activity可以得到用户焦点
4、onPause()表示当前Activity被遮挡,即使其用户焦点
5、onStop()表示当前Activity不可见
6、 onDestory()表示当前的activity被销毁
7、 当Activity没有被销毁的时候重新调用这个Activity就会调用onRestart方法
根据官方给出的说明,可以清楚的知道,在什么状态下,应该处理那些事件。即那些事件放在哪个状态下处理是合适的。
二、为了加深对Activity生命周期的认知,需要看下在多个Activity的时候,对应的生命周期的信息。
例如,我们在第一个Activity里面,通过点击button按钮来启动第二个Activity。
package com.android.activity.demo; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class FirstActivity extends Activity implements View.OnClickListener { private static final String TAG = "FirstActivity"; private Button mButton1 = null; private Button mButton2 = null; private Button mButton3 = null; private Button mButton4 = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); XLog.i(TAG, "onCreate()"); setContentView(R.layou 4000 t.activity_first); findView(); setListener(); } private void findView() { mButton1 = (Button) findViewById(R.id.btn_start_second_activity01); mButton2 = (Button) findViewById(R.id.btn_start_second_activity02); mButton3 = (Button) findViewById(R.id.btn_start_second_activity03); mButton4 = (Button) findViewById(R.id.btn_start_second_activity04); } private void setListener() { mButton1.setOnClickListener(this); mButton2.setOnClickListener(this); mButton3.setOnClickListener(this); mButton4.setOnClickListener(this); } @Override protected void onRestart() { super.onRestart(); XLog.i(TAG, "onRestart()"); } @Override protected void onStart() { super.onStart(); XLog.i(TAG, "onStart()"); } @Override protected void onResume() { super.onResume(); XLog.i(TAG, "onResume()"); } @Override protected void onPause() { super.onPause(); XLog.i(TAG, "onPause()"); } @Override protected void onStop() { super.onStop(); XLog.i(TAG, "onStop()"); } @Override protected void onDestroy() { super.onDestroy(); XLog.i(TAG, "onDestroy()"); } @Override public void onClick(View view) { int id = view.getId(); XLog.i(TAG, "onClick() id = 0x" + Integer.toHexString(id)); switch (id) { case R.id.btn_start_second_activity01: { startSecondActivityByAction(); break; } case R.id.btn_start_second_activity02: { startSecondActivityByClass(); break; } case R.id.btn_start_second_activity03: { startSecondActivityByPackage(); break; } case R.id.btn_start_second_activity04: { startSecondActivityByComponent(); break; } default: break; } } private void startSecondActivityByAction() { XLog.i(TAG, "startSecondActivityByAction()"); Intent intent = new Intent(); intent.setAction("android.intent.action.SECONDACTIVITY_START"); intent.addCategory(Intent.CATEGORY_DEFAULT); try { startActivity(intent); } catch (Exception e) { XLog.i(TAG, "start activity error!"); } } private void startSecondActivityByClass() { XLog.i(TAG, "startSecondActivityByClass()"); Intent intent = new Intent(FirstActivity.this, SecondActivity.class); try { startActivity(intent); } catch (Exception e) { XLog.i(TAG, "start activity error!"); } } private void startSecondActivityByPackage() { XLog.i(TAG, "startSecondActivityByPackage()"); Intent intent = new Intent(); intent.setClassName(getPackageName(), getPackageName() + ".SecondActivity"); try { startActivity(intent); } catch (Exception e) { XLog.i(TAG, "start activity error!"); } } private void startSecondActivityByComponent() { XLog.i(TAG, "startSecondActivityByComponent()"); Intent intent = new Intent(); intent.setComponent(new ComponentName(getPackageName(), getPackageName() + ".SecondActivity")); try { startActivity(intent); } catch (Exception e) { XLog.i(TAG, "start activity error!"); } } }
第二个Activity的部分
package com.android.activity.demo; import android.app.Activity; import android.os.Bundle; public class SecondActivity extends Activity { private static final String TAG = "SecondActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); XLog.i(TAG, "onCreate()"); setContentView(R.layout.activity_second); } @Override protected void onRestart() { super.onRestart(); XLog.i(TAG, "onRestart()"); } @Override protected void onStart() { super.onStart(); XLog.i(TAG, "onStart()"); } @Override protected void onResume() { super.onResume(); XLog.i(TAG, "onResume()"); } @Override protected void onPause() { super.onPause(); XLog.i(TAG, "onPause()"); } @Override protected void onStop() { super.onStop(); XLog.i(TAG, "onStop()"); } @Override protected void onDestroy() { super.onDestroy(); XLog.i(TAG, "onDestroy()"); } }
对应的AndroidManifest.xml的配置
<activity android:name="com.android.activity.demo.SecondActivity" android:label="@string/second_activity_name" > <intent-filter> <action android:name="android.intent.action.SECONDACTIVITY_START" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
1、当我们启动一个Activity的时候,输出的log如下
03-17 09:02:21.766: I/ActivityDemo(12870): FirstActivity onCreate() 03-17 09:02:21.776: I/ActivityDemo(12870): FirstActivity onStart() 03-17 09:02:21.776: I/ActivityDemo(12870): FirstActivity onResume()可以看到,分别先后调用了 onCreate() onStart() onResume()
2、当我们按返回键退出第一个应用的时候,输出log如下
03-17 09:04:01.624: I/ActivityDemo(12870): FirstActivity onPause() 03-17 09:04:02.115: I/ActivityDemo(12870): FirstActivity onStop() 03-17 09:04:02.115: I/ActivityDemo(12870): FirstActivity onDestroy()
退出应用的时候,分别先后调用了onPause() OnStop() onDestroy()
3、第一个应用启动到第二个应用的时候,输出log如下:
03-17 09:05:36.637: I/ActivityDemo(12870): FirstActivity onClick() id = 0x7f060002 03-17 09:05:36.638: I/ActivityDemo(12870): FirstActivity startSecondActivityByAction() 03-17 09:05:36.765: I/ActivityDemo(12870): FirstActivity onPause() 03-17 09:05:36.777: I/ActivityDemo(12870): SecondActivity onCreate() 03-17 09:05:36.780: I/ActivityDemo(12870): SecondActivity onStart() 03-17 09:05:36.780: I/ActivityDemo(12870): SecondActivity onResume() 03-17 09:05:37.222: I/ActivityDemo(12870): FirstActivity onStop()启动到第二个Activity的时候,先是第一个应用的onPause(),失去焦点,被压到后台。
第二个应用的onCreate(创建) onStart(可见) onResume(可以获取焦点)。
当第二个应用onResume()可以获取焦点的时候,在把第一个应用onStop()不可见
4、从第二个应用返回第一个应用,输出log如下:
03-17 09:07:03.518: I/ActivityDemo(12870): SecondActivity onPause() 03-17 09:07:03.523: I/ActivityDemo(12870): FirstActivity onRestart() 03-17 09:07:03.523: I/ActivityDemo(12870): FirstActivity onStart() 03-17 09:07:03.523: I/ActivityDemo(12870): FirstActivity onResume() 03-17 09:07:03.905: I/ActivityDemo(12870): SecondActivity onStop() 03-17 09:07:03.905: I/ActivityDemo(12870): SecondActivity onDestroy()
先是第二个应用的onPause,失去焦点。
第一个应用被重新唤醒 onRestart, onStart可见,onResume可以获取焦点
然后才是第二个应用的onStop不可见,被销毁ondestory
附件:Demo对应的Sorce
Code
相关文章推荐
- Android 四大组件之Activity生命周期
- Android基础知识之四大组件Activity(三)多个Activity交互的生命周期与设计思想
- Android四大组件之——Activity的生命周期(图文详解)
- Android四大组件之一Activity及其生命周期
- android四大组件--Activity生命周期
- Android 四大组件之Activity生命周期
- Android四大组件(1.1)--Activity的生命周期
- android四大组件之一Activity生命周期的理解
- 深入剖析Android四大组件(一)——Activity生命周期详解
- Android四大组件之---activity生命周期详解
- Android四大组件之一Activity生命周期及解释
- Android 四大组件学习之Activity生命周期
- Android核心基础-8.Android四大组件之Activity-3.生命周期、横竖屏切换、启动模式、进程管理
- Android四大组件之——Activity的生命周期(图文详解)
- Android 四大组件生命周期:Activity
- Android基础知识之四大组件Activity(二)一个Activity的生命周期?
- 野人学Android基础篇之四大组件第一课--Activity的生命周期
- Android 四大组件之 Activity(1)--生命周期
- Android四大组件之Activity(七大生命周期)
- Android的四大组件之-Activity的状态和生命周期