編輯:關於Android編程
原文鏈接:http://developer.android.com/guide/components/recents.html{:target=”_blank”}
概覽界面(Overview Screen,通常也被叫做最近屏幕、最近任務列表、最近應用等)是一個系統級的界面,用來展示最近訪問的一些活動
(Activities
)或者任務
(Tasks
)。用戶可以通過上下滑動來浏覽這個列表,並且可以選擇一個任務來恢復或者通過左右滑動一個任務來把這個任務從這個概覽界面裡移除。從Android5.0
(API等級為21)開始,包含不同文檔
(Documents
)的同一個活動的多個實例可能會作為多個任務出現在概覽界面。例如,Google Drive
這個應用會為它打開的每一篇文檔都分配一個“任務”。這樣,每一個文檔都會以一個任務的形式在概覽界面裡顯示。
vcq9s/bP1tTauMXAwL3nw+aho8Tjv8nS1M2ouf08Y29kZT5BY3Rpdml0eU1hbmFnZXIuQXBwVGFzazwvY29kZT7AtLncwO3Izs7xo6zS1Lywzai5/Txjb2RlPkludGVudDwvY29kZT7A4NbQu+62r7XEPGNvZGU+serWvs67PC9jb2RlPqOoPGNvZGU+ZmxhZ3M8L2NvZGU+o6nAtLao0uXSu7j2u+62r8rH1Nq6zsqxsbvM7bzTu/LSxrP9s/a4xcDAxsHEu7XEo6jV4r7ku7CxvtGn1Py40L71t621xLrcsfDFpKOsxMTOu7rD0MS1xM2s0ae/ydLUsO/DpsH00dS+wNX90rvPwtG9o6zUrc7EyOfPwqO6VGhlIEFjdGl2aXR5TWFuYWdlci5BcHBUYXNrIGNsYXNzIGxldHMgeW91IG1hbmFnZSB0YXNrcywgYW5kIHRoZSBhY3Rpdml0eSBmbGFncyBvZiB0aGUgSW50ZW50IGNsYXNzIGxldCB5b3Ugc3BlY2lmeSB3aGVuIGFuIGFjdGl2aXR5IGlzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgb3ZlcnZpZXcgc2NyZWVuLqOpoaPNrNH5o6zO0sPHv8nS1MXk1sPH5bWlzsS8/tbQPGNvZGU+PGFjdGl2aXR5PjwvYWN0aXZpdHk+PC9jb2RlPrHqx6m1xMr00NTAtLao0uXJz8r20NDOqqGjPC9wPg0KPGgyIGlkPQ=="adding-tasks-to-the-overview-screen-往概覽屏幕中添加任務">Adding Tasks to the Overview Screen – 往概覽屏幕中添加任務
用Intent
類的標志位來新增一個任務,可以為一個在概覽界面上的文檔在何時以及如何被打開或重新打開增加更多的控制。而使用標簽時,你可以決定在打開一個文檔時,是使用一個新的任務亦或是重用一個已經存在的任務,而這種清單文件中定義的行為一旦定義則不會改變。
啟動活動時,你應該把Intent
傳給ActivityManager.AppTask
類的startActivity()
方法,來為你的活動創建一個文檔。如果要創建一個邏輯上的斷點來讓系統把你的活動作為一個新的任務顯示在概覽屏幕上,你應當把FLAG_ACTIVITY_NEW_DOCUMENT
標志位傳給用來來啟動這個活動Intent
對象的addFlag()
方法。
NOTE:
FLAG_ACTIVITY_NEW_DOCUMENT
標志位已經取代了FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
,後者已經在Android5.0(API等級21)中過期了。
如果你創建一個新文檔時用了FLAG_ACTIVITY_MULTIPLE_TASK
標志位,則系統在每次打開這個活動時都會創建一個任務,並把這個活動作為根活動放進去。這種操作允許同樣的文檔在多個任務中打開。下面代碼演示了主活動時如何做的:
DocumentCentricActivity.java
public void createNewDocument(View view) {
boolean useMultipleTasks = mCheckbox.isChecked();
final Intent newDocumentIntent = newDocumentIntent();
if (useMultipleTasks) {
newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
}
startActivity(newDocumentIntent);
}
private Intent newDocumentIntent() {
final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
return newDocumentIntent;
}
private static int incrementAndGet() {
Log.d(TAG, incrementAndGet(): + mDocumentCounter);
return mDocumentCounter++;
}
}
NOTE: 被
FLAG_ACTIVITY_NEW_DOCUMENT
標志位啟動的活動,它在清單文件中定義的啟動方式必須是默認啟動方式:android:launchMode=standard
當主活動用Intent
啟動一個新的活動時,系統會搜索所以存在的任務來找到一二任務,即這個任務的Intent
符合當前Intent
的組件名和數據。如果沒找到符合的任務,或者這個Intent
攜帶了一個FLAG_ACTIVITY_MULTIPLE_TASK
標志位,一個新的任務會被創建,而這個即將啟動的活動會作為這個任務的根活動。而如果找到了對應的任務,系統會把這個任務帶回前台,並把新的Intent
傳遞給活動的onNewIntent()
方法。這個新的活動獲得Intent
並在開始概覽屏幕上創建一個新的文檔,如下面的代碼所示:
NewDocumentActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_document);
// TODO something
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
/* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity
is reused to create a new document.
*/
}
一個活動可以在清單文件中定義它總是啟動到一個新的任務,即在“活動”標簽中使用屬性:android:documentLaunchMode
。當用戶打開一個文檔時,這個參數有四種類型來產生不同的效果:
活動會重用已存在的任務。這個參數類似於Intent
中添加了FLAG_ACTIVITY_NEW_DOCUMENT
標志位,卻沒有添加FLAG_ACTIVITY_MULTIPLE_TASK
,可以參考上面Using the Intent flag to add a task – 使用Intent類的標志位來添加一個任務的描述。
活動為這個文檔創建一個新的任務,即使這個文檔已經被打開。這個參數類似於Intent
中同時添加了FLAG_ACTIVITY_NEW_DOCUMENT
和FLAG_ACTIVITY_MULTIPLE_TASK
標志位。
活動不為這個文檔創建一個新的任務。概覽屏幕以默認方式對待這個活動,級:整個應用會作為一個任務在概覽界面上顯示,而概覽屏幕會在用戶選擇這個應用後喚醒用戶最後使用的活動。
never活動不為這個文檔創建一個新的任務。不同於none
,設置這個參數會覆蓋Intent
中的FLAG_ACTIVITY_NEW_DOCUMENT
和FLAG_ACTIVITY_MULTIPLE_TASK
標志位。即使這些標志位被設置,整個應用還是會作為一個任務在概覽界面上顯示,而概覽屏幕會在用戶選擇這個應用後喚醒用戶最後使用的活動。
NOTE: 當參數不選擇
none
和never
時,活動必須被定義為:launchMode=standard
。如果android:documentLaunchMode
參數沒有被定義,則none
參數會作為默認值。
默認情況下,一個帶文檔的任務會在它的活動被結束的時候自動從概覽界面上移除。不過,你可以通過ActivityManager.AppTask
類、Intent
的標志位或者清單文件中“活動”標簽的屬性來覆蓋這種行為。
你可以設置“活動”標簽的屬性來把一個任務排除在概覽屏幕值外,即android:excludeFromRecents=true
。
你可以定義你的應用在概覽界面上顯示的任務的數量的最大值,即android:maxRecents
屬性。這個屬性是一個整型,默認值是16。當任務的數量到達最大值時,最近最少被使用的任務則會在概覽界面上被移除。這個屬性的最大值時50(低內存設備上是25),最小值為1.
AppTask
類來移除任務在創建了一個新任務到概覽屏幕的活動中,你可以定義何時移除這個任務,以及通過調用finishAndRemoveTask()
方法來結束所有關聯到這個任務上的活動。
NewDocumentActivity.java
public void onRemoveFromRecents(View view) {
// The document is no longer needed; remove its task.
finishAndRemoveTask();
}
NOTE: 使用
finishAndRemoveTask()
方法會覆蓋下面提到的FLAG_ACTIVITY_RETAIN_IN_RECENTS
標志位。
如果你想在活動結束之後,依然在概覽屏幕上顯示這個任務,你可以在啟動這個活動的Intent
中添加FLAG_ACTIVITY_RETAIN_IN_RECENTS
標志位。
DocumentCentricActivity.java
private Intent newDocumentIntent() {
final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS);
newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
return newDocumentIntent;
}
為了達成同樣的效果,可以在清單文件的“活動”標簽下添加android:autoRemoveFromRecents=false
。這個屬性對於一般活動來說默認值為false
,而對於設置了文檔屬性的活動來說,默認值則為true
.而這個參數會覆蓋上面提到的FLAG_ACTIVITY_RETAIN_IN_RECENTS
標志位。
Github地址:https://github.com/coder-pig/AndroidStudio-Eat-Guide1.必須記住的快捷鍵:Ctrl+Shift+A
APK解析器解析APKAndroid Studio的APK解析器可以直接查看打包完成的apk的組成。APK解析器可以減少調試app內部的DEX文件和資源文件的時間,對減小
昨天研究了很久,可能由於基礎比較菜吧,所以,沒有搜到一個可以直接解決問題的,需要綜合幾個之後,問題得以解決,記下方法,為了方便自己之後遇到同樣問題,也為了方便搜索同樣問題
前言 在微信剛流行的時候,在搖一搖還能用來那啥的時候,我也曾深更半夜的拿著手機晃一晃。當時想的最多的就是,我靠,為神馬搖一下需要用這麼大的力度,當時我想可能騰訊覺