activity启动模式之singleTask

Posted 范仁义

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了activity启动模式之singleTask相关的知识,希望对你有一定的参考价值。

activity启动模式之singleTask

一、简介

如果另外一个应用调用了C2,C2在栈底,如果这个程序里面再嗲用C1,C3,C2,那么这个C2就是调用onNewIntant的,C1和C3都被销毁了;

另一个程序>c2>c1>c3>c2,实际只剩:另一个程序>c2。

 

二、代码实例

效果图:

上面就是调用了onNewIntent方法的情况

 

代码:

activity.C1

 1 package activity;
 2 
 3 
 4 
 5 
 6 import com.example.activityLaunchSingleTask.R;
 7 
 8 import android.app.Activity;
 9 import android.content.Intent;
10 import android.os.Bundle;
11 import android.view.View;
12 import android.view.View.OnClickListener;
13 import android.widget.Button;
14 
15 
16 
17 public class C1 extends Activity implements OnClickListener{
18     private Button btn_c1;//创建一个button对象
19     private Button btn_c2;//创建一个button对象
20     private Button btn_c3;//创建一个button对象
21      protected void onCreate(Bundle savedInstanceState) {
22             super.onCreate(savedInstanceState);//父类操作
23             setContentView(R.layout.activity_main);//引入名为activity_main的界面
24             setTitle("我是C1");
25             btn_c1=(Button) findViewById(R.id.btn_c1);//找id为btn_openActivity的button
26             btn_c2=(Button) findViewById(R.id.btn_c2);//找id为btn_openActivity的button
27             btn_c3=(Button) findViewById(R.id.btn_c3);//找id为btn_openActivity的button
28             btn_c1.setOnClickListener(this);
29             btn_c2.setOnClickListener(this);
30             btn_c3.setOnClickListener(this);
31         }
32     @Override
33     public void onClick(View v) {
34         // TODO Auto-generated method stub
35         switch (v.getId()) {
36         case R.id.btn_c1:
37             Intent intent=new Intent();
38             intent.setClass(C1.this, C1.class);
39             startActivity(intent);
40             break;
41         case R.id.btn_c2:
42             Intent intent2=new Intent();
43             intent2.setClass(C1.this, C2.class);
44             startActivity(intent2);
45             break;
46         case R.id.btn_c3:
47             Intent intent3=new Intent();
48             intent3.setClass(C1.this, C3.class);
49             startActivity(intent3);
50             break;
51         default:
52             break;
53         }
54     }
55 }

activity.C2

 1 package activity;
 2 
 3 
 4 
 5 
 6 import com.example.activityLaunchSingleTask.R;
 7 
 8 import android.app.Activity;
 9 import android.content.Intent;
10 import android.os.Bundle;
11 import android.view.View;
12 import android.view.View.OnClickListener;
13 import android.widget.Button;
14 import android.widget.Toast;
15 
16 
17 
18 public class C2 extends Activity implements OnClickListener{
19     private Button btn_c1;//创建一个button对象
20     private Button btn_c2;//创建一个button对象
21     private Button btn_c3;//创建一个button对象
22      protected void onCreate(Bundle savedInstanceState) {
23             super.onCreate(savedInstanceState);//父类操作
24             setContentView(R.layout.activity_main);//引入名为activity_main的界面
25             setTitle("我是C2");
26             btn_c1=(Button) findViewById(R.id.btn_c1);//找id为btn_openActivity的button
27             btn_c2=(Button) findViewById(R.id.btn_c2);//找id为btn_openActivity的button
28             btn_c3=(Button) findViewById(R.id.btn_c3);//找id为btn_openActivity的button
29             btn_c1.setOnClickListener(this);
30             btn_c2.setOnClickListener(this);
31             btn_c3.setOnClickListener(this);
32         }
33     @Override
34     public void onClick(View v) {
35         // TODO Auto-generated method stub
36         switch (v.getId()) {
37         case R.id.btn_c1:
38             Intent intent=new Intent();
39             intent.setClass(C2.this, C1.class);
40             startActivity(intent);
41             break;
42         case R.id.btn_c2:
43             Intent intent2=new Intent();
44             intent2.setClass(C2.this, C2.class);
45             startActivity(intent2);
46             break;
47         case R.id.btn_c3:
48             Intent intent3=new Intent();
49             intent3.setClass(C2.this, C3.class);
50             startActivity(intent3);
51             break;
52         default:
53             break;
54         }
55     }
56     
57     @Override
58     protected void onNewIntent(Intent intent) {
59         // TODO Auto-generated method stub
60         super.onNewIntent(intent);
61         Toast.makeText(this, "onNewIntent", Toast.LENGTH_SHORT).show();
62     }
63 }

activity.C3

 1 package activity;
 2 
 3 
 4 
 5 
 6 import com.example.activityLaunchSingleTask.R;
 7 
 8 import android.app.Activity;
 9 import android.content.Intent;
10 import android.os.Bundle;
11 import android.view.View;
12 import android.view.View.OnClickListener;
13 import android.widget.Button;
14 
15 
16 
17 public class C3 extends Activity implements OnClickListener{
18     private Button btn_c1;//创建一个button对象
19     private Button btn_c2;//创建一个button对象
20     private Button btn_c3;//创建一个button对象
21      protected void onCreate(Bundle savedInstanceState) {
22             super.onCreate(savedInstanceState);//父类操作
23             setContentView(R.layout.activity_main);//引入名为activity_main的界面
24             setTitle("我是C3");
25             btn_c1=(Button) findViewById(R.id.btn_c1);//找id为btn_openActivity的button
26             btn_c2=(Button) findViewById(R.id.btn_c2);//找id为btn_openActivity的button
27             btn_c3=(Button) findViewById(R.id.btn_c3);//找id为btn_openActivity的button
28             btn_c1.setOnClickListener(this);
29             btn_c2.setOnClickListener(this);
30             btn_c3.setOnClickListener(this);
31         }
32     @Override
33     public void onClick(View v) {
34         // TODO Auto-generated method stub
35         switch (v.getId()) {
36         case R.id.btn_c1:
37             Intent intent=new Intent();
38             intent.setClass(C3.this, C1.class);
39             startActivity(intent);
40             break;
41         case R.id.btn_c2:
42             Intent intent2=new Intent();
43             intent2.setClass(C3.this, C2.class);
44             startActivity(intent2);
45             break;
46         case R.id.btn_c3:
47             Intent intent3=new Intent();
48             intent3.setClass(C3.this, C3.class);
49             startActivity(intent3);
50             break;
51         default:
52             break;
53         }
54     }
55 }

/activityLaunchSingleTask/AndroidManifest.xml

 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 2     package="com.example.activityLaunchSingleTask"
 3     android:versionCode="1"
 4     android:versionName="1.0" >
 5 
 6     <uses-sdk
 7         android:minSdkVersion="8"
 8         android:targetSdkVersion="19" />
 9 
10     <application
11         android:allowBackup="true"
12         android:icon="@drawable/ic_launcher"
13         android:label="@string/app_name"
14         android:theme="@style/AppTheme" >
15         <activity
16             android:name="activity.C1"
17             android:label="@string/app_name" >
18             <intent-filter>
19                 <action android:name="android.intent.action.MAIN" />
20 
21                 <category android:name="android.intent.category.LAUNCHER" />
22             </intent-filter>
23         </activity>
24         <activity android:name="activity.C2" android:launchMode="singleTask">
25             <intent-filter>
26                 <action android:name="com.example.activityLaunchSingleTask" />
27                 <category android:name="android.intent.category.DEFAULT" />
28             </intent-filter>
29         </activity>
30         <activity android:name="activity.C3"></activity>
31     </application>
32 
33 </manifest>

/activityLaunchSingleTask/res/layout/activity_main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <Button
 8         android:id="@+id/btn_c1"
 9         android:layout_width="match_parent"
10         android:layout_height="50dp"
11         android:layout_weight="0.00"
12         android:text="@string/btn_c1" />
13 
14     <Button
15         android:id="@+id/btn_c2"
16         android:layout_width="match_parent"
17         android:layout_height="wrap_content"
18         android:text="@string/btn_c2" />
19 
20     <Button
21         android:id="@+id/btn_c3"
22         android:layout_width="match_parent"
23         android:layout_height="wrap_content"
24         android:text="@string/btn_c3" />
25 
26 </LinearLayout>

 

以上是关于activity启动模式之singleTask的主要内容,如果未能解决你的问题,请参考以下文章

Activity以singleTask模式启动,intent传值的解决办法,singletaskintent

Android中维护标准应用Activity回栈状态(使用singleTask启动模式)

Android之Activity的启动模式

启动Activity时如何忽略“SingleTask”的launcheMode?

Android之LaunchMode(启动模式)

Activity的启动模式