android - 应用程序关闭后如何在 fragment 中停止 AsyncTask

标签 android android-asynctask android-fragments android-activity

如何在关闭应用程序后停止 Fragment 类中的 AsyncTask?

MainActivity 类

public class MainActivity extends FragmentActivity {

}

BaseFragment 类由 Fragment 扩展

public class BaseFragment extends Fragment {
    public MainActivity mActivity;
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        mActivity       =   (ChatActivity)this.getActivity();
    
    }
    
    public boolean onBackPressed(){
        return false;
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data){
        
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }

    
}

fragment 类

public class Fragment1 extends BaseFragment{


private  Update  task;
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        
        toCallAsynchronous();

        return inflater.inflate(R.layout.activity_online_korisnici, container,
                false);
    }


     public void toCallAsynchronous() {
            final Handler handler = new Handler();
            Timer timer = new Timer();
            TimerTask doAsynchronousTask = new TimerTask() {       
                @Override
                public void run() {
                    handler.post(new Runnable() {
                        public void run() {       
                            try {
                             task =new Update();
                             
                                // PerformBackgroundTask this class is the class that extends AsynchTask 
                                task.execute("");
                            } catch (Exception e) {
                                // TODO Auto-generated catch block
                            }
                        }
                    });
                }
            };
            timer.schedule(doAsynchronousTask, 0, 5000); //execute in every 50000 ms
        }




   private class Update extends AsyncTask<Object, Object, List<Object>>{

    @Override
        protected List<Object> doInBackground(Object... params) {
                     
                 }

@Override
        protected void onPostExecute(List<Object> result) {


}

   }


}

最佳答案

您可以使用 fragment 的 onPause() 方法。当 Fragment 不再恢复时调用它。这通常与包含 Activity 生命周期的 Activity.onPause 相关联。

@Override
public void onPause() {
    super.onPause();
    task.cancel();
}

更新: 如果您在 TabHost 下,并且 Fragment 在按下不同的选项卡时暂停,您可以这样做

在您的 Activity 中存储 fragment ID 或标签

在你的 fragment 中实现一个停止任务的方法

public void onActivityPause() {
    task.cancel();
}

在你的 Activity onPause() 中

@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 版本,请考虑使用 ActionBar 或 ActionBarSherlock。

关于android - 应用程序关闭后如何在 fragment 中停止 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216777/

相关文章:

java - 模拟器不显示任何内容

java - 更新数据库时应用程序崩溃

java - TextView 和缩放

java - 使用 XZ Java for android 获取提取百分比

java - Activity 的实例什么时候会死?

android - 当内容是动态加载的 fragment 时,折叠工具栏不起作用

android - 用自身替换 fragment 不会显示任何内容

Android LiveData 在 fragment 中创建多个观察者

java - Android requestLocationUpdates with GPS null

java - 是否可以像在 android 中一样为我的应用程序的 Activity 创建一个最近的屏幕