标签:
当活动的启动模式指定为singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。当然,如果它不是处于栈顶的位置,那么系统依旧会再创建一个该活动的实例。
我们可以在AndroidManifest.xml文件中进行启动模式的设置;在<activity>标签中添加android:launchModed的属性,其属性值设置为SingleTop即可。
在AS中创建项目LearnLaunchMode_SingleTop,其各部分代码如下:
FirstActivity.java:
1 public class FirstActivity extends ActionBarActivity {
2 private Button start_secondActivity;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 requestWindowFeature(Window.FEATURE_NO_TITLE);
7 setContentView(R.layout.activity_first);
8 //获取Button组件
9 start_secondActivity = (Button) findViewById(R.id.start_secondActivity);
10 start_secondActivity.setOnClickListener(new View.OnClickListener() {
11 @Override
12 public void onClick(View v) {
13 //通过显示意图启动SecondActivity
14 Intent intent = new Intent().setClass(FirstActivity.this, SecondActivity.class);
15 startActivity(intent);
16 }
17 });
18 Log.i("TAG", this + " is launch");
19 }
20 }
SecondActivity.java:
1 public class SecondActivity extends Activity {
2
3 private Button start_firstActivity, start_self;
4 @Override
5 protected void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 requestWindowFeature(Window.FEATURE_NO_TITLE);
8 setContentView(R.layout.activity_second);
9 //获取Button组件
10 start_firstActivity = (Button) findViewById(R.id.start_firstActivity);
11 start_self = (Button) findViewById(R.id.start_self);
12 //以匿名类的形式为Button组件设置事件监听器
13 start_firstActivity.setOnClickListener(new View.OnClickListener() {
14 @Override
15 public void onClick(View v) {
16 //通过显示意图启动SecondActivity
17 Intent intent = new Intent().setClass(SecondActivity.this, FirstActivity.class);
18 startActivity(intent);
19 }
20 });
21 start_self.setOnClickListener(new View.OnClickListener() {
22 @Override
23 public void onClick(View v) {
24 //通过显示意图启动SecondActivity
25 Intent intent = new Intent().setClass(SecondActivity.this, SecondActivity.class);
26 startActivity(intent);
27 }
28 });
29 Log.i("TAG", this + " is launch");
30 }
31 }
activity_first.xml:
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:tools="http://schemas.android.com/tools"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:orientation="vertical"
7 tools:context=".FirstActivity">
8
9 <Button
10 android:id="@+id/start_secondActivity"
11 android:layout_width="match_parent"
12 android:layout_height="wrap_content"
13 android:text="启动第二个Activity!"/>
14
15 </LinearLayout>
Activity_second.xml:
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:tools="http://schemas.android.com/tools"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:orientation="vertical"
7 tools:context=".SecondActivity">
8
9 <Button
10 android:id="@+id/start_firstActivity"
11 android:layout_width="match_parent"
12 android:layout_height="wrap_content"
13 android:text="启动第一个Activity!"/>
14
15 <Button
16 android:id="@+id/start_self"
17 android:layout_width="match_parent"
18 android:layout_height="wrap_content"
19 android:text="启动本身第二个Activity!"/>
20
21 </LinearLayout>
另外,别忘了在AndroidManifest.java文件中注册SecondActivity以及为两个活动设置启动模式为SingleTop:
1 <activity
2 android:name=".FirstActivity"
3 android:label="@string/app_name"
4 android:launchMode="singleTop">
5 <intent-filter>
6 <action android:name="android.intent.action.MAIN" />
7
8 <category android:name="android.intent.category.LAUNCHER" />
9 </intent-filter>
10 </activity>
11 <activity android:name=".SecondActivity" android:launchMode="singleTop"/>
在代码中,我们实现以FirstActivity启动SecondActivity,此时SecondActivity位于栈顶,然后再以SecondActivity来打开自己,如果是Standard模式,那么会另外再创建SecondActivity的实例,但是在SingleTop的模式下,就只会创建一次该活动实例。(PS:在SecondActivity界面时,点击了很多次的"启动本身第二个Activity!"的按钮)
同样,我们还可以在SecondActivity界面点击"启动第一个Activity!"的按钮,虽然栈中已经存在了FirstActivity,但是它并非位于栈顶,所以还是会继续创建FirstActivity的实例。
虽然点击了很多次"启动本身第二个Activity!"的按钮,但因为在栈中只创建一个SecondActivity的实例,所以只需要按一次back键就可以将SecondActivity出栈。
综上所述,可以画出SingleTop启动模式的原理示意图如下:
标签:
原文地址:http://www.cnblogs.com/rocking7189/p/5796671.html