android Task Activity launchMode="singleTask" singleInstance 代码分析
来源:互联网 发布:强强软件 编辑:程序博客网 时间:2024/05/22 03:02
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.testsinglainstance" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.testsinglainstance.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Activity2" android:launchMode="singleInstance" android:label="@string/app_name" > </activity> <activity android:name=".Activity3" android:launchMode="singleTask" android:label="@string/app_name" > </activity> </application></manifest>
package com.example.testsinglainstance;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv = (TextView) findViewById(R.id.tv);tv.setText("1");System.out.println("1-oncreate->TaskId:"+this.getTaskId()+",hashcode:"+this.hashCode());tv.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {MainActivity.this.startActivity(new Intent(MainActivity.this,Activity2.class));}});}@Overrideprotected void onDestroy() {System.out.println("1-onDestroy");super.onDestroy();}}
package com.example.testsinglainstance;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class Activity2 extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv=(TextView) findViewById(R.id.tv);tv.setText("2");System.out.println("2-oncreate->TaskId:"+this.getTaskId()+",hashcode:"+this.hashCode());tv.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Activity2.this.startActivity(new Intent(Activity2.this,Activity3.class));}});}@Overrideprotected void onDestroy() {System.out.println("2-onDestroy");super.onDestroy();}}
package com.example.testsinglainstance;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class Activity3 extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv=(TextView) findViewById(R.id.tv);tv.setText("3");System.out.println("3-oncreate->TaskId:"+this.getTaskId()+",hashcode:"+this.hashCode());tv.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Activity3.this.startActivity(new Intent(Activity3.this,MainActivity.class));}});}@Overrideprotected void onDestroy() {System.out.println("3-onDestroy");super.onDestroy();}}
点击几次按纽后log如下:
12-17 08:48:45.632: I/System.out(5499): 1-oncreate->TaskId:27,hashcode:107908842412-17 08:49:03.539: I/System.out(5499): 2-oncreate->TaskId:28,hashcode:107912816012-17 08:49:04.273: I/System.out(5499): 3-oncreate->TaskId:27,hashcode:107915454412-17 08:49:04.843: I/System.out(5499): 1-oncreate->TaskId:27,hashcode:107917891212-17 08:49:05.953: I/System.out(5499): 1-onDestroy12-17 08:49:06.242: I/System.out(5499): 1-oncreate->TaskId:27,hashcode:107921051212-17 08:49:07.289: I/System.out(5499): 1-onDestroy12-17 08:49:07.523: I/System.out(5499): 1-oncreate->TaskId:27,hashcode:107924192012-17 08:49:07.953: I/System.out(5499): 1-onDestroy12-17 08:49:08.179: I/System.out(5499): 1-oncreate->TaskId:27,hashcode:107927318412-17 08:49:08.531: I/System.out(5499): 1-onDestroy12-17 08:49:08.742: I/System.out(5499): 1-oncreate->TaskId:27,hashcode:1079304448
在3界面按返回键
12-17 08:53:26.968: I/System.out(5499): 3-onDestroy12-17 08:53:27.656: I/System.out(5499): 1-onDestroy12-17 08:53:28.687: I/System.out(5499): 2-onDestroy
在2界面按返回键
12-17 08:52:04.882: I/System.out(5499): 2-onDestroy12-17 08:52:05.937: I/System.out(5499): 1-onDestroy12-17 08:52:09.601: I/System.out(5499): 3-onDestroy12-17 08:52:11.562: I/System.out(5499): 1-onDestroy
结论1
:singleInstance 不新建actvity实例 ,实例在新的Task内
singleTask 不新建actvity实例 ,实例在原Task内
默认每次调用都生成一个新的实例
返回的时候,先返回到当前Task的下个Activity,当前Task到底,再返回到其他TasK
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.testsinglainstance" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.testsinglainstance.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Activity2" android:launchMode="singleTask" android:label="@string/app_name" > </activity> <activity android:name=".Activity3" android:launchMode="singleTask" android:label="@string/app_name" > </activity> </application></manifest>
按文本框log如下:
12-17 08:59:01.054: I/System.out(5598): 1-oncreate->TaskId:31,hashcode:107909612012-17 08:59:08.070: I/System.out(5598): 2-oncreate->TaskId:31,hashcode:107913643212-17 08:59:08.375: I/System.out(5598): 3-oncreate->TaskId:31,hashcode:107916278412-17 08:59:09.406: I/System.out(5598): 1-oncreate->TaskId:31,hashcode:107918698412-17 08:59:09.867: I/System.out(5598): 3-onDestroy12-17 08:59:09.960: I/System.out(5598): 1-onDestroy12-17 08:59:10.320: I/System.out(5598): 3-oncreate->TaskId:31,hashcode:107921381612-17 08:59:10.765: I/System.out(5598): 1-oncreate->TaskId:31,hashcode:107923696012-17 08:59:11.171: I/System.out(5598): 3-onDestroy12-17 08:59:11.257: I/System.out(5598): 1-onDestroy12-17 08:59:11.585: I/System.out(5598): 3-oncreate->TaskId:31,hashcode:107926371212-17 08:59:12.070: I/System.out(5598): 1-oncreate->TaskId:31,hashcode:1079286912
停留在3界面返回
12-17 09:01:26.585: I/System.out(5667): 3-onDestroy12-17 09:01:27.351: I/System.out(5667): 2-onDestroy12-17 09:01:28.421: I/System.out(5667): 1-onDestroy
停留在2界面返回
12-17 09:02:09.914: I/System.out(5667): 2-onDestroy12-17 09:02:10.601: I/System.out(5667): 1-onDestroy
结论2:
singleTask 在原Tast内
1个Task内只保留一个singleTask 后面设置无效
0 0
- android Task Activity launchMode="singleTask" singleInstance 代码分析
- 理解Android的Activity launchMode:standard,singleTop,singleTask,singleInstance
- Understand Android Activity's launchMode: standard, singleTop, singleTask and singleInstance
- Understand Android Activity's launchMode: standard, singleTop, singleTask and singleInstance
- 理解Android的Activity launchMode:standard,singleTop,singleTask,singleInstance
- Activity的launchMode:singleTop,singleTask与singleInstance
- Activity的launchMode:singleTop,singleTask与singleInstance
- Activity之launchMode:singleTop,singleTask与singleInstance
- Activity的launchMode:singleTop,singleTask与singleInstance
- Android Trick 4: Activity的android:launchMode (startard、singleTop、singleTask、singleInstance)
- android:launchMode="singleTask"
- android Activity android:launchMode="singleInstance" 与 startActivityForResult
- 关于android:launchMode=“singleInstance”
- 关于android:launchMode=“singleInstance”
- launchMode中singleTask和singleInstance的区别
- Android activity的启动模式 singletop singletask singleinstance
- Android 中 Activity 启动模式(singleInstance、singleTask、singleTop、standard)
- Android-Activity lunchmode(SingleTask和SingleInstance)的区别
- 【Gson】【2】Gson使用演示
- 在线编程学习网站大搜罗
- oracle 一致性读
- STL泛型编程-bitset位集合容器
- 第一天:jquery发布框
- android Task Activity launchMode="singleTask" singleInstance 代码分析
- axis1.4生成代码调用Webservice(备忘)
- 代码整理——contact
- 关于取一个数的前几位
- linux内核异常分析
- 面向对象数据库
- There is no statement named XXX in this SqlMap
- ac自动机(dp)<AC自动机模板> ---高精度处理
- Java SE 8 Lambda 特性与基本原理