[英]Android - Activity finish() results black screen
我有一個AlertActivity
和一個Activity
。 收到廣播后,兩個活動都需要完成。 但是,如果AlertActivity
在Activity
之上,則以下代碼將導致黑屏。
以下是Activity
的代碼:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("BROADCAST_INTENT")){
if(alertActvity != null)
alertActivity.finish();
finish();
}
}
並在AlertActivity
編寫代碼:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("BROADCAST_INTENT"))
finish();
}
}
首先,活動的onStop()
獲取調用之前AlertActivity
的onStop()
被調用,導致黑屏,甚至AlertActivity
的finish()
調用之前Activity
的finish()
請在這方面幫助我。
最后,我找到了一個解決方案:
延遲1秒才能完成Activity
,這確實有效。 到那時, AlertActivity
完成,並且黑屏無法顯示。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 1000);
與AlertActivity
和Activity
,您正在檢查相同的動作“ BROADCAST_INTENT” ,我假設您都將兩個接收者都注冊在自己的類中。
如果這樣做,則實際上您有兩個廣播接收器在等待同一事件。 發生此事件時,兩個接收器都將獲取它。
因此,您的AlertActivity
已完成兩次。
我認為@Amit K. Saha是正確的,您的AlertActivity
可能會完成兩次
解決方案:
如果您的應用程序正在運行> = API 16,則可以使用finishAffinity()
方法:
完成此活動以及當前任務中緊接其下的所有具有相同相似性的活動 。 當應用程序可以啟動到另一個任務(例如從它了解的內容類型的ACTION_VIEW)啟動並且用戶使用向上導航切換到當前任務並切換到其自己的任務時,通常使用此方法。 在這種情況下,如果用戶已導航到第二個應用程序的任何其他活動,則應將所有這些活動從原始任務中刪除,作為任務切換的一部分。
請注意,完成此操作后,您無法將結果傳遞到上一個活動,如果嘗試這樣做,將引發異常。
您可以從AlertActivity
調用finishAffinity()
,因為它位於Activity
之上。 這將完成AlertActivity
和Activity
我的透明活動完成結果黑屏,搜索后,我發現它是由Android 4.4中的活動切換動畫引起的。 但是在android 5.1之上沒有出現這種現象。 所以我添加以下代碼:
@Override
public void finish() {
super.finish();
overridePendingTransition(0, 0);
}
完成后的黑屏消失了。 我認為這可能會有所幫助。
嘗試這個
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("BROADCAST_INTENT"))
context.finish();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.