0

我正在研究一個包含兩個活動 - MainActivity(parent)和detailActivity(child)的非常簡單的應用程序。父和子關係在清單文件中設置。加載數據並保持其持久性的最佳實踐

Mainactivity有一個recyclerView,並且在回收站視圖中爲每個項目單擊它,它會打開detailActivity。

一切工作到目前爲止,除了我的應用程序運行緩慢。

我在MainActivity的onCreate方法中有一個processJson方法,該方法從靜態json文件中加載數據。此文件是相當大(> 700行)

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_char); 

    processJson(); 
    ....... 
} 

切換從MainActivity到DetailActivity

Intent intent = new Intent(this, CharDetailActivity.class); 
intent.putExtra("charId", charId); 
cxt.startActivity(intent); 

從DetailActivity切換到MainActivity只是通過後退按鈕或通過動作條後退按鈕。

AndroidManifest.xml中

<activity 
     android:name=".CharDetailActivity" 
     android:label="@string/title_activity_char_detail" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".CharActivity" /> 
    </activity> 

如果我刪除了元標記的應用程序調用MainActivity的OnCreate只有一次!

每當應用程序從DetailActivity切換到MainActivity時,它都會調用onCreate並重新加載數據。有沒有更好的方式來加載應用程序中的數據?或保存MainActivity的實例?

+0

發佈從「DetailActivity」切換到「MainActivity」的代碼,反之亦然。 – Simas

+0

用代碼更新了問題。謝謝 – Jayaram

+0

如果在切換到另一個時不銷燬'MainActivity',則不應調用onCreate()'。我不知道你是否隨時調用finish(),或者通過調用'startActivity'返回主要活動? – Simas

回答

2

大衛說:

UP導航啓動與Intent.FLAG_ACTIVITY_CLEAR_TOP父活動。此標誌的標準行爲是完成任務堆棧中父活動(包括父活動本身)之上的所有活動,然後啓動父活動**的新實例。如果你想恢復父活動的現有實例,那麼你可以設置在清單父活動如下:

android:launchMode="singleTop" 

當CLEAR_TOP和SINGLE_TOP一起使用,這將恢復的父Activity的現有實例。在這種情況下,onCreate()將不會在繼續的父Activity上調用,而是將調用onNewIntent()。

check his answer here