編輯:關於Android編程
關於Android中launchMode的文章介紹的真心不少,廣為流傳而且介紹的最詳細的莫過於這篇文章http://blog.csdn.net/android_tutor/article/details/6310015。但是這篇文章中關於singletask和singleinstance在評論中還是有些不解和爭論,在此根據實例重點說下這兩種模式:
實例簡介:有兩個Activity,分別為AActivity和BActivity,界面相同。點擊按鈕A和B,分別啟動AActivity和BActivity,觀察效果:
上代碼:
layout_task.xml<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjxicj4KPC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;">
1.設置兩個Activity的android:launchMode="singleTask" 點擊startB按鈕打印效果 進入BActivity界面後,這時再點擊startA按鈕打印結果(先清屏) 總結:當一個Activity被設置為singletask時 (1)它並沒有創建新的任務棧(根據上面打印效果展示,AActivity和BActivity的TaskId都等於76) (2)如果它已經存在於棧中,再次請求觸發此Activity時,會調用此類實例的onNewIntent方法,不會重新創建新的實例 (3)如果此類所在的任務棧上面有其它Activity,那麼其它的Activity會被銷毀 2.設置兩個Activity的android:launchMode="singleInstance" 點擊startB按鈕打印效果 進入BActivity界面後,這時再點擊startA按鈕打印結果(先清屏) 再點擊startB按鈕打印結果(先清屏) 總結:當一個Activity被設置為singleinstance時 (2)如果任務棧中已經有此實例,會調用onNewIntent方法,不會創建新的任務棧和實例 (3)獨立成Taskstack ,並且有且僅有你自己 ,孤家寡人 。而且始終保持一個實例離棧的時候 , 先退當前的task ,再退另外的task
AActivity.java
package com.example.activitytask;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class AActivity extends Activity{
private static final String TMG = "ActivityTask";
private static int mIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_task) ;
mIndex++ ;
Log.i(TMG,"AActivity Create"+mIndex+" TaskId="+getTaskId()) ;
Button _buttonStartA = (Button)findViewById(R.id.buttonStartA) ;
_buttonStartA.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent _intent = new Intent(AActivity.this,AActivity.class) ;
startActivity(_intent) ;
}
}) ;
Button _buttonStartB = (Button)findViewById(R.id.buttonStartB) ;
_buttonStartB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent _intent = new Intent(AActivity.this,BActivity.class) ;
startActivity(_intent) ;
}
}) ;
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TMG,"AActivity Destory"+mIndex+" TaskId="+getTaskId()) ;
mIndex--;
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.i(TMG,"AActivity onNewIntent"+mIndex+" TaskId="+getTaskId()) ;
}
}
BActivity.java
package com.example.activitytask;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class BActivity extends Activity{
private static final String TMG = "ActivityTask";
private static int mIndex = 0 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_task) ;
mIndex++ ;
Log.i(TMG,"BActivity Create"+mIndex+" TaskId="+getTaskId()) ;
Button _buttonStartA = (Button)findViewById(R.id.buttonStartA) ;
_buttonStartA.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent _intent = new Intent(BActivity.this,AActivity.class) ;
startActivity(_intent) ;
}
}) ;
Button _buttonStartB = (Button)findViewById(R.id.buttonStartB) ;
_buttonStartB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent _intent = new Intent(BActivity.this,BActivity.class) ;
startActivity(_intent) ;
}
}) ;
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TMG,"BActivity Destory"+mIndex+" TaskId="+getTaskId()) ;
mIndex--;
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.i(TMG,"BActivity onNewIntent"+mIndex+" TaskId="+getTaskId()) ;
}
}
程序剛啟動時的打印結果
這時我們發現BActivity銷毀,此時再點擊startB,BActivity重新創建
程序剛啟動時的打印結果
1.問題是如何發生的,會在什麼情況下發生此類問題?當用戶運用手機清理助手或後台回收我們的應用造成我們應用程序進程被殺死的時候就有可能出現這種空指針的問題,下面舉個例子我們
關於activity的動畫,相信大家再熟悉不過了,我們開發中經常用到,網上資料也很多,但是也有一些小細節需要我們注意,今天這篇文章我總結了幾種常用的動畫實現方式,通過這篇
Android自定義控件實戰——滾動選擇器PickerView &n
今天周日,不適合出門,太冷了,俗說:一九二九不出手,三九四九零來走。。我們的應用也可以有一些冬天的效果, 教大家做一個下雪的動畫效果, 參考.主要(1) 隱藏status