取決於你的需要,但也許這是足以改變你的活動launchmode清單中:
android:launchMode="singleTask"
與此相反,「singleTask」和「singleInstance」活動只能開始的任務。它們始終處於活動堆棧的根部。而且,該設備一次只能保存一個活動實例 - 只有一個這樣的任務。
這會阻止onDestroy之前調用onCreate。
編輯:
另一種可能的解決辦法是手動檢查是否有運行在例如應用程序其他進程的onCreate:
ActivityManager activityManager = (ActivityManager) this
.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> procInfos = activityManager
.getRunningAppProcesses();
int counter = 0;
for (int i = 0; i < procInfos.size(); i++) {
if (procInfos.get(i).processName.equals(this.getPackageName())) {
counter++;
}
if (counter > 1) {
// send broadcast to make other activities call finish() or the like
}
}
用,因爲它感覺升技的hackish,但因爲沒有其他的建議已經張貼到現在爲止,你不妨試一試發佈這個答案猶豫了。
我將它用於不同的場景,其中手機有時會在啓動後兩次啓動我的應用程序。有了這段代碼,我可以通過簡單地調用finish來防止第二次啓動。
感謝您的信息,我根本不知道這個屬性。不幸的是,我有許多活動將以這種方式進行初始化,並且必須允許它們存在於活動堆棧中的任何位置。 – user2676185
編輯我的答案與另一個建議(不知道你是否得到自動通知) – cYrixmorten
由於等待線程持有對被銷燬的活動/視圖的引用,系統也無法乾淨地刪除它,從而導致備份在堆棧上。再次一些很好的信息,感謝哥們:)我認爲解決這個問題最簡單的方法是永遠殺死onPause()方法中的init線程,並在onResume()方法內重新啓動它。由於您提供了有價值的信息而被標記爲已回答。再次感謝隊友。 – user2676185