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

android:Activity啟動模式之singleInstance

編輯:關於Android編程

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

只有一個實例,並且這個實例獨立運行在一個activity任務棧中,這個task只有這個實例,不允許有別的Activity存在下面我們通過一個實例來了解singleInstance啟動模式

在手機上的運行結果如下圖

\

layout布局文件為

<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"><button android:id="@+id/button1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Activity1"></button><button android:id="@+id/button2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Activity2"></button><button android:id="@+id/button3" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Activity3"></button></linearlayout>

分別為三個按鈕添加點擊事件,點擊後分別打開對應的Activity.三個Acitivy大同小異。很容易區分,只不過Activity2是singleInstance啟動模式 其它兩個為默認的啟動模式(standard)

 

MainActivity(Activity1).class

 

package com.example.activitysingleinstance;

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 MainActivity extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2,btn_open3;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setTitle("Activity1");
		//在日志中輸出棧ID
		Log.d("SingleInstance", "Activity1的棧ID:"+getTaskId()+"");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open3=(Button) findViewById(R.id.button3);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
		btn_open3.setOnClickListener(this);
		
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(this,Activity2.class));
			break;
		case R.id.button3:
			startActivity(new Intent(this,Activity3.class));
			break;
		}
	}

}

Activity2.class
package com.example.activitysingleinstance;

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 Activity2 extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2,btn_open3;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setTitle("Activity2");
		//在日志中輸出棧ID
		Log.d("SingleInstance", "Activity2的棧ID:"+getTaskId()+"");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open3=(Button) findViewById(R.id.button3);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
		btn_open3.setOnClickListener(this);
		
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(this,Activity2.class));
			break;
		case R.id.button3:
			startActivity(new Intent(this,Activity3.class));
			break;
		}
	}
	//如果調用這個方法就在日志中輸出信息
	@Override
	protected void onNewIntent(Intent intent) {
		// TODO Auto-generated method stub
		super.onNewIntent(intent);
		Log.d("SingleInstance", "Activity2調用onNewIntent");
	}

}
Activity3.class
package com.example.activitysingleinstance;

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 Activity3 extends Activity implements OnClickListener{
	private Button btn_open1,btn_open2,btn_open3;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setTitle("Activity3");
		//在日志中輸出棧ID
		Log.d("SingleInstance", "Activity3的棧ID:"+getTaskId()+"");
		btn_open1=(Button) findViewById(R.id.button1);
		btn_open2=(Button) findViewById(R.id.button2);
		btn_open3=(Button) findViewById(R.id.button3);
		btn_open1.setOnClickListener(this);
		btn_open2.setOnClickListener(this);
		btn_open3.setOnClickListener(this);
		
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			startActivity(new Intent(this,MainActivity.class));
			break;
		case R.id.button2:
			startActivity(new Intent(this,Activity2.class));
			break;
		case R.id.button3:
			startActivity(new Intent(this,Activity3.class));
			break;
		}
	}

}
最後不要忘記在AndroidManifest.xml中配置Activity2和Activity3的信息
   <activity android:launchmode="singleInstance" android:name="com.example.activitysingleinstance.Activity2"></activity>
        <activity android:name="com.example.activitysingleinstance.Activity3"></activity>
現在我們把它部署到手機上。

按照這個打開順序。

Activity1->Activity2->Activity3->Activity1->Activity2

我們看看在日志中的輸出情況

\

分析:啟動Activity1,創建一個Activity棧,ID=17.然後打開Activity2,因為Activity2為SingleInstance啟動模式,這個實例要獨自運行在一個棧中,我們會發現Activity2又新建了一個Activity棧,ID=18.然後再打開Activity3,進入ID=17的棧中,再打開Activity1繼續進入ID=17的棧中。我們再次打開Activity2發現已經棧中已經有了Activity2的實例,不會創建新的實例,但會調用其onNewIntent方法。

具體棧的情況如下圖

\

需要按幾次返回能回到主界面呢?聰明的你知道了把~那你也就理解了singleInstance啟動模式

·4次~

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