Activity与service的生命周期及其关系
来源:互联网 发布:csdn php 编辑:程序博客网 时间:2024/06/05 05:32
要了解Activtiy与service的生命周期先要了解他们直接各个生命周期是多少,他们之间有是如何联系一起!
Acitvity有7个生命周期,网上很多资料都有:onCreate--onStart---onRuzme---onPause---onStop--onDestory.、onRestart。还有经常用到的两个函数:onSaveInstanceState、、onConfigurationChanged,onRestoreInstanceState在保持页面信息、横竖屏切换(或者配置变更)及恢复页面信息时候调用。
Sevice的生命周期相对简单:onCreate--onStartCommand--onbind--onunbind--onDestory;其中startService的执行顺序是:onCreate--onStartCommand-onDestory。而bindService的执行顺序是:onCreate--onbind--onunbind--onDestory。
好了了解以上的原理我们现在探索一下他们的之间关系是如何:
思路:建立一个Mainctivity来关系他们。创建三个子Activity和两个service,
MainActivity的代码如下:
import android.app.Service;import android.content.Intent;import android.content.res.Configuration;import android.os.IBinder;import android.util.Log;public class Service2 extends Service{@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubLog.i("TAG2", "onBind");intent.setClass(this, Activity2.class);startActivity(intent);return null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();Log.i("TAG2", "onCreate");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stubLog.i("TAG2", "onStartCommand");intent.setClass(this, Activity2.class);startActivity(intent);return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubLog.i("TAG2", "onDestroy");super.onDestroy();}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);Log.i("TAG2", "onConfigurationChanged");}@Overridepublic boolean onUnbind(Intent intent) {// TODO Auto-generated method stubLog.i("TAG2", "onUnbind");return super.onUnbind(intent);}}Activity1的代码:
public class Activity1 extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activit1);Log.i("TAGActivity1", "onCreate");}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onRestoreInstanceState(savedInstanceState);Log.i("TAGActivity1", "onRestoreInstanceState");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i("TAGActivity1", "onStart()");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.i("TAGActivity1", " onRestart()");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i("TAGActivity1", "onResume()");}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);Log.i("TAGActivity1", "onSaveInstanceState");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.i("TAGActivity1", "onPause");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i("TAGActivity1", "onStop");}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);Log.i("TAGActivity1", "onActivityResult");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i("TAGActivity1", "onDestroy");}}Activity2的代码如下:
package com.acivity_service_test1;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;public class Activity2 extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activit2);Log.i("TAGActivity2", "onCreate");}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onRestoreInstanceState(savedInstanceState);Log.i("TAGActivity2", "onRestoreInstanceState");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i("TAGActivity2", "onStart()");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.i("TAGActivity2", " onRestart()");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i("TAGActivity2", "onResume()");}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);Log.i("TAGActivity2", "onSaveInstanceState");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.i("TAGActivity2", "onPause");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i("TAGActivity2", "onStop");}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);Log.i("TAGActivity2", "onActivityResult");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i("TAGActivity2", "onDestroy");}}Activity3的代码:
package com.acivity_service_test1;import android.app.Activity;import android.content.Intent;import android.content.res.Configuration;import android.os.Bundle;import android.util.Log;public class Activity3 extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activit3);Log.i("TAGActivity3", "onCreate");}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onRestoreInstanceState(savedInstanceState);Log.i("TAGActivity3", "onRestoreInstanceState");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i("TAGActivity3", "onStart()");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.i("TAGActivity3", " onRestart()");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i("TAGActivity3", "onResume()");}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);Log.i("TAGActivity3", "onSaveInstanceState");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.i("TAGActivity3", "onPause");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i("TAGActivity3", "onStop");}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);Log.i("TAGActivity3", "onActivityResult");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i("TAGActivity3", "onDestroy");}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);Log.i("TAGActivity3", "onConfigurationChanged");}}Sservice1的代码:
package com.acivity_service_test1;import android.app.Service;import android.content.Intent;import android.content.res.Configuration;import android.os.IBinder;import android.util.Log;public class Service1 extends Service{@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubLog.i("TAG1", "onBind");//Log.i("TAG1", intent.getStringExtra("zhongguo"));return null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();Log.i("TAG1", "onCreate");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stub//intent=new Intent();//Log.i("TAG1", intent.getStringExtra("zhongguo"));Log.i("TAG1", "onStartCommand");//Log.i("TAG1", intent.getStringExtra("zhongguo"));//intent=new Intent();////if (getPackageName()==null) {//Log.i("TAG1", "package==null");////}else Log.i("TAG1", getPackageName().toString());intent.setClassName(getPackageName(),getPackageName()+"."+ "Activity1");startActivity(intent);//intent.setClass(this, Activity2.class);//startActivity(intent);return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubLog.i("TAG1", "onDestroy");super.onDestroy();}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);Log.i("TAG1", "onConfigurationChanged");}@Overridepublic boolean onUnbind(Intent intent) {// TODO Auto-generated method stubLog.i("TAG1", "onUnbind");return super.onUnbind(intent);}}
Service2的代码:
package com.acivity_service_test1;import android.app.Service;import android.content.Intent;import android.content.res.Configuration;import android.os.IBinder;import android.util.Log;public class Service2 extends Service{@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubLog.i("TAG2", "onBind");intent.setClass(this, Activity2.class);startActivity(intent);return null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();Log.i("TAG2", "onCreate");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stubLog.i("TAG2", "onStartCommand");intent.setClass(this, Activity2.class);startActivity(intent);return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubLog.i("TAG2", "onDestroy");super.onDestroy();}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);Log.i("TAG2", "onConfigurationChanged");}@Overridepublic boolean onUnbind(Intent intent) {// TODO Auto-generated method stubLog.i("TAG2", "onUnbind");return super.onUnbind(intent);}}启动Activity界面如下:
一、研究Activity的生命周期,启动StartActivity
如果是按返回键Activity销毁
如果是home键
这时候再点击Activity时
如果是横竖屏会生命情况呢?
在在manifest.xml设置:android:configChanges
如下:
4.0以上版本需要在mainfest.xml中设置了 android:configChanges="keyboardHidden|orientation|screenSize“。如果是4.0以下的版本的属性设置:android:configChanges="keyboardHidden|orientation“
锁屏和开屏有是什么情况呢,看如下
二、Activity与Service的关系
Service的启动的有两种一个舍startService一个是bindservice。如果要停止一定要使用stopservice否则service会一直存在,如果service没有被销毁当再次启动时,直接调用onStartCommand方法。后者与启动它的Activity同个生命周期,当启动它的Activity调用onDestory时。程序调用service中的这两个方法onUnbind和onDestory;
还有一种情况是当Activity销毁时没调用onDestory方法而是强制退出销毁,Startservice也是回被销毁。
- Activity与service的生命周期及其关系
- Fragment生命周期及其与activity的关系
- Fragment生命周期及其与activity的关系
- Servers与Activity 的线程关系;Service的生命周期;Service与Activity通信
- (转)Servers与Activity 的线程关系;Service的生命周期;Service与Activity通信
- Service的生命周期与Activity生命周期区别
- Service与Activity的关系
- Activity与Service生命周期
- Activity与Service生命周期
- 一张图帮你分析activity与fragment的生命周期及其他们的关系
- android activity与service的生命周期
- fragment的生命周期与activity的关系
- service汇总(service模拟后台下载、service刷新UI、service与Activity生命周期关系、service和活动间的通信)
- 面试题--- Service的生命周期与Activity生命周期区别
- Activity和Service的生命周期
- android activity&service的生命周期
- Activity、Service生命周期的理解
- Activity&Fragment&Service的生命周期
- JavaSE_Set遍历的2种方法
- 最全面的常用正则表达式大全
- signal和sigaction的分析比较
- Java 多线程之死锁
- Git学习笔记
- Activity与service的生命周期及其关系
- CAN与CANOpen(五)
- TMS320F28335学习笔记——DMA
- 大型网站架构演变和知识体系
- spark cogroup操作
- 关于软件测试的术语
- 华中农业大学第四届程序设计大赛网络同步赛Problem I: Catching Dogs
- MarkDown的初次学习使用。
- ListView的优化