[英]Closing Receiver triggered splash screen (activity) opens main activity after closing
[第一個應用]我有一個特定的動畫啟動畫面(活動),可以通過廣播打開它,可以通過活動本身上的按鈕或通過另一個廣播來關閉它。 打開和關閉都工作正常。 但是,每當啟動屏幕處於活動狀態(在屏幕上)並且我播放廣播或單擊按鈕時,該活動便會關閉,但會將我的主要(啟動器)活動置於前台。 如果我在啟動屏幕上按返回按鈕,它將打開我的主要活動。 如果我按下主頁按鈕並通過通知動作發送廣播,則一切正常。
如果我打開我的應用程序(即啟動器活動),請按“后退”按鈕,然后交付接收器以打開啟動屏幕,然后在關閉時它不會打開我的主要活動。 這意味着我的啟動屏幕始終位於應用程序堆棧的頂部。 這是正常現象嗎? 我想避免這種情況,因此歡迎任何解決方法。
啟動啟動屏幕的代碼:
private void showSplashScreen() {
Intent m_intent = new Intent(this, SafSplashActivity.class);
m_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
m_intent.putExtra("theme", theme);
context.startActivity(m_intent);
}
更新1:如果在我的閃屏活動中使用System.exit(0)
代替finish(0)
,則我的主要活動不是從頭開始(而是最終進入了前景),而不是將我的主要活動帶到了前台。 ..
PS-這對我的應用程序來說是一個嚴重的問題,因為即使在用戶單擊啟動屏幕上的啟動按鈕后,即使在單擊啟動屏幕上的關閉按鈕后,他們仍可能會試圖對應用程序進行“強制停止”操作。 這對應用程序不利,因為它高度依賴於系統觸發的廣播,然后該廣播將被阻止。
盡管我曾問過這是一個老問題,但最終還是通過添加到我的啟動意圖中解決了它:
m_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
根據文檔:
如果在傳遞給Context.startActivity()的Intent中進行設置,則此標志將導致新啟動的任務放置在當前家庭活動任務的頂部(如果有)。 也就是說,從任務上按一下將始終使用戶返回家中,即使這不是他們最后看到的活動。
因為,我的啟動活動是一個獨立的活動,即使在手機被鎖定的情況下也應該啟動,因此上述標記非常合適。 缺點是該標志只能在API 11+上使用(即,我的4個用戶將無法從中受益:D)。 無論如何,這似乎比使用非標准的launchMode
。
我通過為啟動活動設置launchMode="singleInstance"
解決了該問題。 雖然,我仍然不確定原始問題是否應該存在。 如果在其他人的用例中無法使用singleInstance啟動模式怎么辦? 那么解決方案是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.