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

android:Activity啟動模式之singleTop

編輯:關於android開發

android:Activity啟動模式之singleTop


先看一下singleTop啟動模式的說明:

可以有多個實例,但是不允許此Activity的多個實例疊加。即,如果此Activity有實例在棧頂的時候,啟動這個Activity,不會創建新的實例而會調用其OnNewIntent方法,如果不在棧頂則創建新的實例

下面我們通過一個實例來仔細了解

這是在手機上的效果

\

首先是xml布局文件,共兩個按鈕

 


創建兩個繼承Activity的類,分別為MainActivity和OtherActivity,代碼基本全部相同,都同時使用上面的xml布局文件

 

MainActivity.class

 

package com.example.singletop;

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.Button;

public class MainActivity extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//設置標題為Activity1
		setTitle("我是Activity1");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(MainActivity.this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(MainActivity.this,OtherActivity.class));
			break;
		}
	}
}
OtherActivity.class

 

 

package com.example.singletop;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class OtherActivity extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//設置標題為Activity2
		setTitle("我是Activity2");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(OtherActivity.this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(OtherActivity.this,OtherActivity.class));
			break;
		}
	}
	//在此方法中打印是否調用這個方法的日志
	@Override
	protected void onNewIntent(Intent intent) {
		// TODO Auto-generated method stub
		super.onNewIntent(intent);
		Log.d("OtherActivity", "OnNewIntent");
	}
}

至於MainActivity和OtherActivity的區別:

MainActivity是standard啟動模式

OtherActivity是singleTop啟動模式

在AndroidManifest.xml中MainActivity默認就是standard啟動模式

配置一下OtherActivity就好

        <activity android:name="com.example.singletop.OtherActivity" android:launchmode="singleTop"></activity>
我們舉幾個例子。

Activity1->Activity2->Activity1->Activity2

我們做完這些 在棧中的情況是

\

然後我們看看日志信息 為空 說明並沒有調用onNewIntent方法,因為我們在創建啟動模式為singleTop的Activity2時Activity2不在棧頂。需要按四次返回才能返回到主界面。

2.Activity1->Activity2->Activity2->Activity2

這個時候棧裡面的情況是什麼樣的呢?

\

沒錯 就是這樣的 。為什麼呢?因為我們在創建第三個Activity2時,因為Activity2為singleTop的啟動模式,發現此時有在第二個創建的Activity2為棧頂,所以不會創建新的實例而會調用其OnNewIntent方法。創建第四個Activity2也是同樣的道理。這時候我們只需要按兩次返回鍵就能返回到主界面。下面看看日志信息

\

看到這裡的小伙伴的你,懂了這種啟動模式了嗎?

在加深一下印象吧~

singleTop啟動模式的說明:

可以有多個實例,但是不允許此Activity的多個實例疊加。即,如果此Activity有實例在棧頂的時候,啟動這個Activity,不會創建新的實例而會調用其OnNewIntent方法,如果不在棧頂則創建新的實例

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