2011-06-17 46 views
7

由於一個複雜的原因,我需要能夠在用戶按HOME按鈕時完成()我的活動。如何在按下主屏幕按鈕時完成()一個活動

這裏的故事是我有一個主屏幕小部件,它啓動了具有完全透明活動的應用程序的不同部分(因此即使我的活動正在運行,主屏幕仍在顯示)。如果以前的活動通過「主頁」按鈕終止,則會將其帶到前臺並遮擋主屏幕。

或者作爲替代方案,我可以以某種方式強制完成()以前的活動嗎?

+0

我建議擺脫透明的活動,所以人們會不動心是指你的應用程序爲間諜軟件。 – CommonsWare

+0

謝謝馬克;這種透明活動有很好的理由。我在主屏幕小部件上顯示短時間內的動畫(6秒後自行破壞),我不希望用戶打開其他應用程序,因此這也用於「鎖定」主屏幕;它也必須是一個活動,因爲我必須進行一些只能在UI線程上使用的調用。 – Yossi

+1

「我不希望用戶打開其他應用程序」 - 爲什麼這對用戶有好處? 「它也必須是一個活動,因爲我必須進行一些只能在UI線程上使用的調用。」 - 如?我能想到的唯一這樣的電話與活動和小部件本身有關。 – CommonsWare

回答

8

怎麼樣

android:launchMode="singleTask" 

android:launchMode="singleInstance" 
在您的清單

?我認爲singleTask是你想要的,但我仍然不清楚你在做什麼。

「系統在新任務的根目錄創建活動並將意圖發送給它,但是,如果活動的實例已經存在,則系統通過調用onNewIntent將意向路由到現有實例( )方法,而不是創建一個新的。「 singleTask

@Override 
void onPause() { 
    super.onPause(); 
    finish(); 
} 

開發文檔:Acitvity LifecycleFinish

+0

謝謝 - 但這也會完成我的活動,當我產生一個孩子的活動 - 所以我每當我產生兒童活動時都需要保持一個標誌 - 笨重。 – Yossi

+2

解決了它!這個答案是最接近的,所以我會接受它。我添加了一個完成()到[onUserLeaveHint](http://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()),並確保所有來自此活動的startActivity調用都包含標誌** Intent.FLAG_ACTIVITY_NO_USER_ACTION **,這樣** onUserLeaveHint()**只在用戶真正離開我的活動時被調用。這些Android平臺的人想到了一切! – Yossi

+0

哈哈感謝接受,很高興能有所幫助:) –

0

不知道關於home鍵按完成(),但我認爲你可以使用完成()之前的活動:

Intent i = new Intent(MainActivity.this, SecondActivity.class); 
startActivity(i); 
finish(); 

大概不會,雖然做的最好的方式。我認爲你也可以調用子活動的父活動並完成它,但不確定。

+0

這將完成您編寫代碼行'finish();'的行爲。 @Yossi,或許發出一個你可以解釋的意思,意味着是時候打電話完成了。只是大聲思考。 – eternalmatt

+0

發送一個意圖讓我思考!如果我的小部件使用的pendingIntent包含[link](http://stackoverflow.com/questions/5979171/clear-all-activities-in-a-task/5979351#5979351)中引用的標誌,那麼該怎麼辦?揮之不去的活動。我會試試看。 – Yossi

+0

沒有工作 - 因爲鏈接中的標誌需要API 11 - 這使得今天市場上99%的設備無用... – Yossi

0

我有問題收盤home鍵的聲音被按下。我在下面做了這段代碼。希望它能幫助你。 重寫onpause()方法。

@Override 
public void onPause(){ 
     System.exit(0); 
     super.onPause(); 
} 
+1

謝謝...我會關心使用非Android的框架調用。如果它吹走了我App關閉時仍需要的東西(比如文件指針)會怎麼樣? – Yossi

3

對主屏幕啓動的活動設置android:clearTaskOnlaunch =「true」。 例子:

<activity 
 
      android:name="MainActivity" 
 
      android:exported="true" 
 
      android:clearTaskOnLaunch="true" 
 
      android:label="@string/app_name" 
 
      android:screenOrientation="portrait" > 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.MAIN" /> 
 

 
       <category android:name="android.intent.category.LAUNCHER" /> 
 
      </intent-filter> 
 
     </activity>

+0

請勿將該網站用不相關的YouTube鏈接發送給該網站。 – laalto

+0

好的。謝謝你 .. –

0
@Override 
public void onStop() { 
    super.onDestroy(); 
} 
相關問題