Activity与service的生命周期及其关系
2016-05-15 17:15
417 查看
要了解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的代码如下:
Service2的代码:
一、研究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也是回被销毁。
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{ @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub Log.i("TAG2", "onBind"); intent.setClass(this, Activity2.class); startActivity(intent); return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.i("TAG2", "onCreate"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub Log.i("TAG2", "onStartCommand"); intent.setClass(this, Activity2.class); startActivity(intent); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO Auto-generated method stub Log.i("TAG2", "onDestroy"); super.onDestroy(); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); Log.i("TAG2", "onConfigurationChanged"); } @Override public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub Log.i("TAG2", "onUnbind"); return super.onUnbind(intent); } }Activity1的代码:
public class Activity1 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activit1); Log.i("TAGActivity1", "onCreate"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onRestoreInstanceState(savedInstanceState); Log.i("TAGActivity1", "onRestoreInstanceState"); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); Log.i("TAGActivity1", "onStart()"); } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); Log.i("TAGActivity1", " onRestart()"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Log.i("TAGActivity1", "onResume()"); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); Log.i("TAGActivity1", "onSaveInstanceState"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); Log.i("TAGActivity1", "onPause"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); Log.i("TAGActivity1", "onStop"); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Log.i("TAGActivity1", "onActivityResult"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.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 { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activit2); Log.i("TAGActivity2", "onCreate"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onRestoreInstanceState(savedInstanceState); Log.i("TAGActivity2", "onRestoreInstanceState"); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); Log.i("TAGActivity2", "onStart()"); } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); Log.i("TAGActivity2", " onRestart()"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Log.i("TAGActivity2", "onResume()"); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); Log.i("TAGActivity2", "onSaveInstanceState"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); Log.i("TAGActivity2", "onPause"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); Log.i("TAGActivity2", "onStop"); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Log.i("TAGActivity2", "onActivityResult"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.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 { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activit3); Log.i("TAGActivity3", "onCreate"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onRestoreInstanceState(savedInstanceState); Log.i("TAGActivity3", "onRestoreInstanceState"); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); Log.i("TAGActivity3", "onStart()"); } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); Log.i("TAGActivity3", " onRestart()"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Log.i("TAGActivity3", "onResume()"); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); Log.i("TAGActivity3", "onSaveInstanceState"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); Log.i("TAGActivity3", "onPause"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); Log.i("TAGActivity3", "onStop"); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Log.i("TAGActivity3", "onActivityResult"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.i("TAGActivity3", "onDestroy"); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.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{ @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub Log.i("TAG1", "onBind"); // Log.i("TAG1", intent.getStringExtra("zhongguo")); return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.i("TAG1", "onCreate"); } @Override public 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); } @Override public void onDestroy() { // TODO Auto-generated method stub Log.i("TAG1", "onDestroy"); super.onDestroy(); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); Log.i("TAG1", "onConfigurationChanged"); } @Override public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub Log.i("TAG1", "onUnbind"); return super.onUnbind(intent); } }
Service2的代码:
package com.acivity_service_test1;启动Activity界面如下:
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{ @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub Log.i("TAG2", "onBind"); intent.setClass(this, Activity2.class); startActivity(intent); return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.i("TAG2", "onCreate"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub Log.i("TAG2", "onStartCommand"); intent.setClass(this, Activity2.class); startActivity(intent); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO Auto-generated method stub Log.i("TAG2", "onDestroy"); super.onDestroy(); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); Log.i("TAG2", "onConfigurationChanged"); } @Override public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub Log.i("TAG2", "onUnbind"); return super.onUnbind(intent); } }
一、研究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也是回被销毁。
相关文章推荐
- 字符串问题
- linux mount命令
- 基于jquery实现ajax无刷新评论
- 数据绑定——DataGrid
- 面试:数组:合并有序数组
- poj 1008
- JavaScript中的return、return true及return false
- HDFS 常用命令
- Java 多线程扩展之JMM
- (Win32)PlaySound播放Wav声音+mciSendString播放多媒体
- linux网络传输文件
- spark join操作
- Java文件与IO(二)之字符流
- URL编码与解码
- jquery的延迟加载插件Lazy Load Plugin for jQuery
- C# 使用Conditional特性而不是#if条件编译
- PHP程序员的技术成长规划
- Mac使用wireshark对移动设备抓包
- 如何修改tomcat的账号密码
- 驱动开发杂记1