您的位置:首页 > 其它

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的代码如下:

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;

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界面如下:

一、研究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也是回被销毁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: