我有一個應用程序需要在某人退出其主要活動時呼叫完成(因此我不希望它是暫停),即使按家庭活動必須完成,爲了處理這個問題,我現在只需在我的onPause()
方法中調用finish()
,因爲一切都是用碎片完成的,它工作得很好,並且沒有任何穩定性問題。在onPause()內調用finish()但在方向改變時不會調用
我唯一的問題是,我不能處理方向的變化,因爲onPause()
被之前調用(讓我禁用旋轉時出現這種情況)。
我可以創建一個服務來處理這個問題,但它的方式很複雜。
有什麼想法?
我有一個應用程序需要在某人退出其主要活動時呼叫完成(因此我不希望它是暫停),即使按家庭活動必須完成,爲了處理這個問題,我現在只需在我的onPause()
方法中調用finish()
,因爲一切都是用碎片完成的,它工作得很好,並且沒有任何穩定性問題。在onPause()內調用finish()但在方向改變時不會調用
我唯一的問題是,我不能處理方向的變化,因爲onPause()
被之前調用(讓我禁用旋轉時出現這種情況)。
我可以創建一個服務來處理這個問題,但它的方式很複雜。
有什麼想法?
您可以使用onWindowFocusChanged事件,而不是onPause。當方向改變時這個函數不被調用。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.d(TAG, "FOCUS = " + hasFocus);
if (!hasFocus) finish();
}
但要注意:此事件被稱爲活動時仍然可見(如在onPause()),你應該 如果你想完成的活動使用的onStop當它是真的,完全看不見:
private boolean isInFocus = false;
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.d(TAG, "FOCUS = " + hasFocus);
isInFocus = hasFocus;
}
@Override
public void onStop() {
super.onStop();
if (!isInFocus) finish();
}
呃,看起來不錯,讓我試試! – JohnUopini 2013-04-29 09:05:33
感謝您解決我的問題 - 我想找到一種方法來區分應用程序最小化和方向更改。 – 2013-10-17 13:30:08
從你的問題來看,你似乎只有一個活動,在這種情況下,你應該在清單中設置一個標誌。在您的MainActivity清單中添加
android:clearTaskOnLaunch="true"
謝謝Hoan,這將清除啓動時的活動,但它不會在退出時完成它,因爲我需要重新啓動一個服務並在退出時釋放一些內存,我需要在退出時完成。 – JohnUopini 2013-04-29 08:57:30
爲什麼你不能在onStop()中調用finish()? – 2013-04-29 09:29:53
如果您只是暫停活動,並且我想在暫停期間完成,則不會調用onStop() – JohnUopini 2013-04-29 13:43:45
你可以聆聽方位的變化,並在變化事件存儲有關它一個布爾值,像
boolean orientationChanging;
使這個真實的取向時變,虛假事後,比在你的onPause:
@Override
protected void onPause() {
if(!orientationChanging){
finish();
}
}
由於onConfigurationChanged永遠不會被調用(onPause被首先調用),所以這不起作用。 – JohnUopini 2013-04-29 08:58:26
其簡單的只是做:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = ((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay();
orientation = display.getOrientation();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
int orientation_ = display.getOrientation();
if (orientation_ != orientation) {
finish();
}
Log.e("hello=---->", "onPause");
super.onPause();
}
每次啓動應用程序時,是否要在MainActivity上啓動應用程序?也就是說,如果您的應用程序處於活動B並且用戶按下了主鍵,那麼當應用程序再次啓動時,它會從MainActivity開始而不是活動B? – 2013-04-29 08:35:34
如果在onStop()之前調用'onConfigurationChanged()',則可以在其中調用'finish()'。 – rciovati 2013-04-29 09:03:36
@HoanNguyen沒有活動B我只有一個活動 – JohnUopini 2013-04-29 13:42:07