簡體   English   中英

關閉接收器觸發的初始屏幕(活動),關閉后將打開主要活動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM