2

我有Activity一个ViewPager里面。当创建的活动asyncTask被执行并且任务完成时,Fragment使用结果数据创建一个。(重要说明:没有这个数据,Fragment创建视图将崩溃,因为它明确需要该数据)

现在Fragment创建后我回到主屏幕,打开另一个应用程序等等并创建内存不足的情况。Activity由于内存不足,我被杀死了。

现在我打开任务管理器并再次单击我的应用程序。

Android 试图将所有内容重新显示在屏幕上。由于所有Activity被杀死的数据也丢失了,但它仍然尝试重新创建片段,尽管没有数据并且我的应用程序崩溃了。

我能做什么?...我有两个解决方案(至少理论上的解决方案)

  1. 防止在恢复时重新启动活动(我该怎么做????)

  2. 防止片段创建视图使用数据,除非它存在

好吧,我确实实施了第二个解决方案。所以应用程序一开始不会崩溃,因为“不存在数据”是handeld。但我意识到 ViewPager 也与片段断开连接,因为井活动被杀死。所以我无法从活动中返回片段。

4

3 回答 3

3

多年后......遇到同样的问题,一个残酷的解决方案是在调用 super 之前将 savedInstanceSate 设置为 null :

@Override
protected void onCreate(Bundle savedInstanceState) {
    savedInstanceState = null;
    super.onCreate(savedInstanceState);
}
于 2016-09-14T10:24:16.337 回答
1

不要执行异步任务 onCreate 而是在 onResume 中执行它,以便在您的应用程序回到顶部时调用

至于片段,请在异步任务的 onPostExecute 中创建或调用它,以确保加载数据。(如果您在其他地方调用(如单击按钮),则通过布尔变量对其调用进行调节,并在 onResume 中将此变量设置为 false,并在 Async 任务的 onPostExecute 中将其设置为 true)

还有一件事:您可能希望在异步任务中显示一个带有 (cancelable = false) 的进度对话框,以确保数据完整性并防止用户导航您的寻呼机,除非数据已完全加载, - 在 onPreExecute 中显示进度对话框和(diss 错过)它在 onPostExecute

-- 希望对您有所帮助:)

于 2014-02-19T21:26:45.000 回答
0

在Activity中,通过这段代码获取ViewPager中的Fragment

fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.rewards_viewpager + ":"+position);

然后

fragment.doSomething();
于 2016-10-01T06:37:03.473 回答