Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Activity啟動模式之SingleTop,activitysingletop

Activity啟動模式之SingleTop,activitysingletop

編輯:關於android開發

Activity啟動模式之SingleTop,activitysingletop


  當活動的啟動模式指定為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啟動模式的原理示意圖如下:

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved