1. 程式人生 > >Android點選home鍵重啟的解決

Android點選home鍵重啟的解決

問題描述:
當App在第一次安裝後,開啟app,然後再點選home鍵,當再次點選桌面的icon時,發現app重啟,重新回到了首頁,並且每點選一次icon,就會在activity的Task中多出一個首頁,在連續按返回鍵將所有首頁清除掉後,此問題消失。或者在殺掉該app後再次進入,此問題消失。
問題分析:
經過一天的查詢分析,在第一個安裝後,activity管理棧似乎對進入的activity不做任何判斷與標記(是否是棧頂的activity),每次都會入棧,在將棧清空後又回覆正常(就是Task對activity做記錄了,哪個處於棧頂,是否在棧裡等)。
問題非常奇怪,在第一個安裝後,點選icon,都會生產一個新的首頁,不會用已存在在棧中的首頁替換,直接就入棧了
如果有高人對此通透,還望指點一二!
問題解決:
通過不斷嘗試與搜尋,該問題解決:
程式碼如下:

if(!this.isTastRoot()){
    Intent mainIntent = getIntent();
    String action = main.getAction();
    if(mainIntent.hasCategory(Intent.CATEGORY_LAUNCHER)&&action.equals(Intent.ACTION_MAIN)){
        finish();
        return;
    }
}

解釋一下:
isTastRoot:判斷該Activity是否是所在Task的頂部的activity,即是Task的Root,如果是返回true,否則返回false;
然後獲得Intent,

mainIntent.hasCategory(Intent.CATEGORY_LAUNCHER)&&action.equals(Intent.ACTION_MAIN)

判斷該activity是否在預設的任務棧中。
在mianfest中我們會設定啟動的activity,其中categroy為category_launcher,action為action_main,在這裡,以後預設的activity都會在啟動activity所在的任務棧裡(預設的,當然也可以使用自己命名的任務棧,一般不會)。
如果不是從Task中取出的(已存在Task中的),而是系統新生成的(沒有回覆Task中的),那麼就finish掉,然後return;結束這種不正常。避免出現異常。
在啟動activity的super.onCreate後新增以上程式碼,即可解決Android點選home鍵重啟的問題!
在此已做記錄!