我正在开发一个非常简单的应用程序,它包含两个活动 - 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 :(得分:2)
UP导航使用Intent.FLAG_ACTIVITY_CLEAR_TOP启动父Activity。此标志的标准行为是完成位于任务堆栈中父活动之上的所有活动,包括父活动本身,然后启动父活动**的新实例。如果要恢复父Activity的现有实例,则可以在父Activity的清单中设置以下内容:
android:launchMode="singleTop"
当CLEAR_TOP和SINGLE_TOP一起使用时,这将恢复父Activity的现有实例。在这种情况下,不会在恢复的父Activity上调用onCreate(),而是调用onNewIntent()。
答案 1 :(得分:2)
我建议查看活动启动模式(http://inthecheesefactory.com/blog/understand-android-activity-launchmode/en)。您可以使用这些来控制每次从详细活动导航到主活动时是否会调用onCreate(Bundle savedInstanceState)
。
根据您的使用情况,您需要将主要活动的启动模式设置为singleTop
或singleTask
。