Android AsyncTask - 为什么不执行doInBackground()?

use*_*024 6 android fragment android-asynctask

我有一个包含以下方法的嵌套片段:

public void onSave() {
    if (getActivity() == null || view == null) return;
    if (file != null && file.exists()) {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected void onPreExecute() {
                Log.d("log", "onPreExecute of save ex");
            }

            @Override
            protected Void doInBackground(Void... params) {

                Log.d("log", "doInBackground of save ex");
                //DO SOMETHING
                return null;
            }

            protected void onPostExecute(Void result) {
                BaseFragment fragment = new LocalListFragment();
                ((LocalLauncherFragment)(LocalEditFragment.this.getParentFragment())).setFragment(fragment);
                Log.d("log", "end of save ex");
            };
        }.execute();
    } else {
        showAlert();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我第一次调用此方法,它将执行直到onPostExecute().但是,如果我转到其他片段并重新打开此片段(通过创建一个新的片段对象并替换它),则只执行onPreExecute().为什么这个asyncTask对象第二次没有很好地执行?

如果我使用executeOnExecutor()那么它会在第二次正常工作.但为什么不执行()工作?AsyncTask的生活是否与片段或其他东西联系在一起?

提前致谢!

kab*_*uko 1

在我看来,好像有什么东西挂在里面AsyncTask。在现代版本的 Android 中,除非您指定多线程,AsyncTask否则它们在单线程上运行。仍然运行成功,因为它在主线程上运行。但您永远不会看到第二次,因为单个后台线程仍然因第一次调用而挂起。您需要检查 的内容以了解导致挂起的原因。ExecutoronPreExecute()doInBackgroundLocalKeekLauncherFragment.setFragment(fragment)