【问题标题】:Async Task in Fragment1 Blocks Another Async Task on different Fragment2Fragment1 中的异步任务阻塞了不同 Fragment2 上的另一个异步任务
【发布时间】:2015-02-11 15:49:24
【问题描述】:

我有一个带有抽屉菜单的单一活动应用程序

public class MainActivity extends ActionBarActivity {
....
void selectItem(int position) {

          Bundle args = new Bundle();
          args.putInt(PageFragment.ARG_Page_NUMBER, position);
          android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
          android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
          android.support.v4.app.Fragment fragment;
          int ActiveFragmentId = 3;
          if(position == 0 ){
             fragment = new Fragment1();
          } else if( position == 1){   
        fragment = new Fragment2();
    }
}
....

并且 Fragment1 和 Fragment2 两个片段中都有异步任务

现在,如果 Fragment1 任务中的 Asnc 任务已启动(即在 Fragment1 中的异步任务的 onBackground() 上保持断点)并且如果我切换到 Fragment2 在 Fragment1 的 onPostExceute() 执行之前,Fragment2 中的异步任务将无法工作。这是为什么?

还有getActivity() == null,在Fragmnet1的Async Task的onPostExecute()里面,同时切换到Fragment2

【问题讨论】:

    标签: android android-fragments android-asynctask


    【解决方案1】:

    正如他们在执行顺序部分here 中提到的,执行顺序取决于您的 API 级别。

    您需要使用task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params) 而不仅仅是task.execute(params)

    【讨论】:

    • 现在似乎可以工作(即它不是阻塞),但是 getActivity() == null,在 Fragmnet1 的异步任务的 onPostExecute() 内部,同时切换到 Fragment2
    • 好吧..如果你想让后台任务持续时间超过片段的生命周期,我建议你使用服务。 AsyncTasks 用于短的后台任务。
    • 我想要它,只要 Activity 在那里,而不是碎片。所以你是说切换片段会使getActivity() == null 在 onPostExecute() 内同时替换片段
    【解决方案2】:

    尝试使两个异步任务同步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2017-07-07
      • 1970-01-01
      • 2019-01-24
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多