Android 如何在应用程序关闭后停止片段中的异步任务
如何在关闭应用程序后停止片段类中的AsyncTask 以下是我的情况: 主要活动类 BaseFragment类按片段扩展 片段类Android 如何在应用程序关闭后停止片段中的异步任务,android,android-asynctask,android-fragments,android-activity,Android,Android Asynctask,Android Fragments,Android Activity,如何在关闭应用程序后停止片段类中的AsyncTask 以下是我的情况: 主要活动类 BaseFragment类按片段扩展 片段类 我认为这可以在MainActivity->onPause方法中完成,但是如何完成。task.cancel可以完成。确保在onBackground和onPostExecute中包含要取消的频繁检查,以避免访问/更新不再存在的UI。任务。取消将执行此操作。确保在onBackground和onPostExecute中包含要取消的频繁检查,以避免访问/更新不再存在的UI。您可
我认为这可以在MainActivity->onPause方法中完成,但是如何完成。task.cancel可以完成。确保在onBackground和onPostExecute中包含要取消的频繁检查,以避免访问/更新不再存在的UI。任务。取消将执行此操作。确保在onBackground和onPostExecute中包含要取消的频繁检查,以避免访问/更新不再存在的UI。您可以使用片段的onPause方法。当片段不再恢复时调用它。这通常和包含活动的生命周期的Activity.onPause相关联
@Override
public void onPause() {
super.onPause();
task.cancel();
}
更新:
如果您在TabHost下,并且当按下不同的选项卡时片段被暂停,那么您可以这样做
在活动中存储片段id或标记
实现一种方法来停止片段中的任务
public void onActivityPause() {
task.cancel();
}
在你的活动中暂停
@Override
protected void onPause() {
super.onPause();
FragmentManager fm = getFragmentManager();
for (int id : ids) {
Fragment f = fm.findFragmentById(id);
try {
Method stop = f.getClass().getMethod("onActivityPause");
close.invoke(f);
} catch (Exception e) {}
}
}
但无论如何,我不会使用TabHost,它已经被弃用了。如果需要支持V4版本,请考虑使用ActoBar或ActoBaseSelcod。
可以使用OnpStIp方法的片段。当片段不再恢复时调用它。这通常和包含活动的生命周期的Activity.onPause相关联
@Override
public void onPause() {
super.onPause();
task.cancel();
}
更新:
如果您在TabHost下,并且当按下不同的选项卡时片段被暂停,那么您可以这样做
在活动中存储片段id或标记
实现一种方法来停止片段中的任务
public void onActivityPause() {
task.cancel();
}
在你的活动中暂停
@Override
protected void onPause() {
super.onPause();
FragmentManager fm = getFragmentManager();
for (int id : ids) {
Fragment f = fm.findFragmentById(id);
try {
Method stop = f.getClass().getMethod("onActivityPause");
close.invoke(f);
} catch (Exception e) {}
}
}
但无论如何,我不会使用TabHost,它已经被弃用了。如果需要支持V4版本,请考虑使用ActoBar或ActAsBalSelCub。 < P>我也遇到了类似的问题——本质上,在用户破坏了活动之后,我在异步任务中得到了NPE。在研究了堆栈溢出问题后,我采用了以下解决方案: 布尔运算 ActivityCreated Bundle savedInstanceState上的公共无效{
super.onActivityCreated(savedInstanceState);
running=true;
...
}
public void onDestroy() {
super.onDestroy();
running=false;
...
}
然后,我检查我的异步代码是否定期运行。我已经对其进行了压力测试,现在无法中断我的活动。与我在上面看到的一些解决方案相比,这种方法工作得非常好,并且具有更简单、更不容易出错的优点。我也遇到了类似的问题-本质上,我在使用后在异步任务中得到了一个NPEr破坏了活动。在研究堆栈溢出问题后,我采用了以下解决方案: 布尔运算 ActivityCreated Bundle savedInstanceState上的公共无效{
super.onActivityCreated(savedInstanceState);
running=true;
...
}
public void onDestroy() {
super.onDestroy();
running=false;
...
}
然后,我检查我的异步代码中是否周期性地运行。我已经进行了压力测试,现在我不能中断我的活动。这是完美的,它比我看到的一些解决方案更简单、更容易出错。
我会考虑把它放在销毁中,可能在OnDelCH中。我会考虑把它放进去。在onDestroy中,可能是在OnDetch中。不太热。对运行的变量的访问不同步,甚至volatile也可以工作。更好的是,使用AsyncTask.isCancelled。感谢G.Blake Meike。我已将运行定义为volatile,并将调查AsyncTask.isCancelled。不太热。对运行的变量的访问不同步,甚至volatile可以工作。更好的方法是使用AsyncTask.isCancelled。感谢G.Blake Meike。我已经将运行定义为volatile,并将调查AsyncTask.isCancelled。