在開發中我們一般都是直接AS上的安裝(Run)按鈕,直接安裝到真機或模擬器上進行測試,但是當發布時就要先打包,再拷貝安裝。如題目中的描述,這個問題在平時Debug的時候并不存在,只有發布正式版的時候才會出現,(尼瑪,隱藏的挺深?。】煽恿宋伊耍。?/p>
開始發現這個問題,我以為是app被系統kill了,但是經過我多次調試與分析,發現當打開app后,再按home鍵回到桌面時,這時不點擊app圖標,而是啟動任務列表,從任務列表中恢復app,就不會出現這個問題,所以排除了被系統kill的因素。
經過與同事討論,與上網搜索,終于找到了問題的原因和解決辦法。
原因分析:這篇文字分析的比較詳細:http://www.cnblogs.com/net168/p/5722752.html
主要原因是:每次啟動Intent導致新創建Task的時候,該Task會記錄導致其創建的Intent;而如果后續需要有一個新的與創建Intent完全一致(完全一致定位為:啟動類,action、category等等全部一樣,不可多項也不可缺少),那么該Intent并不會觸發Activity的新建啟動,而只會將已經存在的對應Task移到前臺;這也就是為什么桌面會在再次點擊圖標時將后臺任務挪到前臺而不是重新啟動App的實現。
解決辦法:
在啟動頁的Activity中的 onCreate()方法做處理
PRotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 避免從桌面啟動程序后,會重新實例化入口類的activity if (!this.isTaskRoot()) { // 判斷當前activity是不是所在任務棧的根 Intent intent = getIntent(); if (intent != null) { String action = intent.getAction(); if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) { finish(); return; } } }}如果啟動頁為SplashActivity,之后finish掉啟動MainActivity,解決辦法:將MainActivity的launchMode設置為“singleTask”
<activity android:name=".activity.StartActivity" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity><activity android:name=".activity.MainActivity" android:launchMode="singleTask" android:screenOrientation="portrait" />新聞熱點
疑難解答