我的Activity
里面有ViewPager
。当创建活动时,执行asyncTask
并且当任务完成时,使用结果数据创建Fragment
。(重要说明:没有此数据Fragment
创建视图将崩溃,因为它明确需要数据)
现在创建Fragment
之后,我会回到主屏幕,打开另一个应用程序等等,并创建一个低内存情况。由于记忆力低,我的Activity
被杀死了。
现在我打开任务管理器并再次点击我的应用程序。
Android尝试将所有内容重新带回屏幕。由于所有Activity
被杀死的数据也会丢失,但它仍会尝试重新创建片段,尽管没有数据且我的应用程序崩溃。
我能做些什么?......我有两个解决方案(至少是理论解决方案)
阻止活动重启(我怎么能这样做?)
阻止片段创建视图使用数据,除非它存在
我确实实施了第二个解决方案。因此应用程序在开始时不会崩溃,因为"没有数据存在"是handeld。但我意识到ViewPager也与碎片断开连接,因为活动被杀死了。所以我无法从活动中找到片段。
答案 0 :(得分:2)
多年之后......遇到同样的问题,一个残酷的解决方案是在调用super之前将savedInstanceSate设置为null:
@Override
protected void onCreate(Bundle savedInstanceState) {
savedInstanceState = null;
super.onCreate(savedInstanceState);
}
答案 1 :(得分:1)
而不是执行异步任务onCreate在onResume中执行它,只要你的应用程序重新登上就可以调用
对于片段,在Async任务的onPostExecute中创建或调用它以确保加载数据。 (如果你根据请求调用其他地方(比如按钮点击)然后通过布尔变量调整其调用,并在onResume中将此变量设置为false,并在异步任务的onPostExecute中将其设置为true)
还有一件事:您可能希望在Async任务中显示一个进度对话框(cancelable = false)以确保数据完整性并防止用户导航您的寻呼机,除非数据已完全加载, - 在onPreExecute中显示进度对话框,并在onPostExecute中显示(错过)它
- 希望这个帮助:)
答案 2 :(得分:0)
在活动中,通过此代码获取ViewPager中的Fragment
fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.rewards_viewpager + ":"+position);
然后
fragment.doSomething();