我知道,我得到了相同的結果與兩個代碼片段完成老活動,並開始一個新的,反之亦然
finish();
startActivity(newActivity);
和
startActivity(newActivity);
finish();
我想知道你的意見,如果他們之間有很大的區別。這個比那個好嗎?如果是這樣,爲什麼?
我知道,我得到了相同的結果與兩個代碼片段完成老活動,並開始一個新的,反之亦然
finish();
startActivity(newActivity);
和
startActivity(newActivity);
finish();
我想知道你的意見,如果他們之間有很大的區別。這個比那個好嗎?如果是這樣,爲什麼?
當您執行startActivity()時,所做的只是將您的意圖發佈到一系列事件中。活動的實際開始在不久的將來會異步發生。所以我沒有看到兩者之間的巨大差異。
我會做第二選擇,我沒有支持任何我從官方資料中看到的東西,但是在調用完成之前啓動新的活動更有意義,這樣新的活動就會彈出通過一個意圖來啓動,現在的後臺活動可以調用所有的清理方法。
如果你想這樣做,反過來說,也許意圖在清理完成之前沒有時間開火。即在finish()調用之後,活動是否會調用startActivity()?
我希望你明白我想說的是什麼,爲了安全起見,我會做第二個選擇。
是的,我明白你的想法。這聽起來很合理。但我無法想象我,當這種情況成爲可能時 – Tima 2010-11-15 16:05:10
除了Emmanuels答案:
這兩種方法startActivity
和finish
將預定調用方法結束後,因爲兩者都是由UI線程處理。
我有類似的問題:
Activity A: singleInstance
Activity B: singleInstance
Activity C: singleInstance
A starts B
B starts C
C wants to start A:
在這裏,如果我使用:
finish();
startActivity(A);
事情發生了連線:活動B來代替對前景中的! 但如果我改變這樣的代碼:
startActivity(A);
finish();
一切似乎確定和活動一來可見。
我不知道是什麼問題,但似乎在第一種情況下,C在執行startActivity命令之前完成,以便處理該情況並顯示其最高活動是B! 但在第二種情況下,一切正常發生。
完成()應用程序時,android從堆棧中取出LRU活動,即B。此外,這讓我認爲finish()是立即的而不是異步的。 – 2014-04-08 14:34:52
動畫顯然不同(至少在4.1以上)。調用finish()
首先開始先消除第一個活動,然後您可以在新活動淡入之前短暫地看到黑色背景。調用startActivity()
首先在舊活動之上淡入新活動,黑色背景不可見。
我通常做startActivity()
之前finish()
,因爲我認爲這將確保新的屏幕出來之前出去之前。
我在我的應用程序中有一個登錄頁面。用戶登錄成功後,登錄活動消失,主要活動已啓動。它在Android 4中工作正常。
今天我想在Material Design中重寫它。但是,我遇到了一個很大的問題。新的Android工作室通過材料設計創建空白活動,我認爲這需要很多資源。同樣的過程,但我得到了錯誤
11-26 18:20:44.450 18397-18397/? I/Choreographer: Skipped 42 frames! The application may be doing too much work on its main thread.
11-26 18:20:44.485 18397-18408/? I/art: Background partial concurrent mark sweep GC freed 2864(191KB) AllocSpace objects, 4(43MB) LOS objects, 13% free, 100MB/116MB, paused 8.056ms total 39.767ms
它說,我的應用程序需要很多資源mainActivity
開始在我的手機logcat的時候。我在mainActivity
中沒有任何內容,只是它是默認的Material Design佈局。
我顛倒了順序,現在它在我的手機上沒有錯誤地工作。
對我來說聽起來很明智 – Tima 2010-11-15 16:06:19
動畫對我來說是不同的。請參閱下面的答案。 – Monstieur 2014-05-21 09:02:00
,但方法是完全錯誤的。在這個用例中有實際存在的標誌(用於清單中的intent)。 – Ewoks 2015-06-02 13:04:37