加载数据并保持持久性的最佳实践

时间:2015-10-12 19:56:43

标签: android android-activity android-recyclerview recycler-adapter

我正在开发一个非常简单的应用程序,它包含两个活动 - 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的实例?

2 个答案:

答案 0 :(得分:2)

大卫说:

  

UP导航使用Intent.FLAG_ACTIVITY_CLEAR_TOP启动父Activity。此标志的标准行为是完成位于任务堆栈中父活动之上的所有活动,包括父活动本身,然后启动父活动**的新实例。如果要恢复父Activity的现有实例,则可以在父Activity的清单中设置以下内容:

android:launchMode="singleTop"
  

当CLEAR_TOP和SINGLE_TOP一起使用时,这将恢复父Activity的现有实例。在这种情况下,不会在恢复的父Activity上调用onCreate(),而是调用onNewIntent()。

check his answer here

答案 1 :(得分:2)

我建议查看活动启动模式(http://inthecheesefactory.com/blog/understand-android-activity-launchmode/en)。您可以使用这些来控制每次从详细活动导航到主活动时是否会调用onCreate(Bundle savedInstanceState)

根据您的使用情况,您需要将主要活动的启动模式设置为singleTopsingleTask