gpt4 book ai didi

android - 当 android 终止后台任务时,AsyncTask postExecute 或 onCancelled 不会被调用 - 不再有后台进程

转载 作者:行者123 更新时间:2023-11-29 22:01:49 26 4
gpt4 key购买 nike

我正在运行一个队列,我正在下载视频并使队列正常工作,需要强制调用 AsyncTask 的 postExecute .. 或者必须有一个事件,当我的 asynctask 被处理器杀死时我可以得到它说“没有更多的后台任务”..内存不足..OnCancelled 也没有被调用...有什么帮助吗???


@kdehairy Intent 服务???好的,实际上我需要更新我的用户界面。例如,我有一个正在下载的视频,它是在异步任务中启动的,我会跟踪该 block 并相应地更新我的自定义进度条,如果用户破坏了 Activity 我不会取消我的 ansynctask 直到我的工作完成完成..我跟踪 asynctask..如果由于某种原因我的 asynctask 停止,即使它在后台...它再次询问任务..这是由服务完成的...我说的是即使我不知道我的 asynctask从服务或应用程序排队...但我只是跳过正在排队的 asyncatsks 的轨道..并从堆栈中推送和弹出..asynctask postexecute 刷新我的 View ...就像如果 asynctask 正在从服务运行我检查 postExecute 如果我UI 屏幕是可见的...比我调用新的 Intent..with Flags SingleTop 和 New Task 这样我可以刷新我的进度条..我可以使用 IntentService 更新我的 UI 吗..它会在 UIThread 还是工作线程上运行..

你能给我举个例子吗...???谢谢 Kdehairy

最佳答案

如果处理流程的生命周期对您来说至关重要,那么最好使用服务。AsyncTask 不是系统组件(服务是)。

更新:

  1. 使用您自己的实现扩展 IntentService
  2. 要更新 UI,您可以使用广播。如下:

    1. 每当您需要更新 UI 时,请在您的服务中写入:

      Intent intent = new Intent(ACTION_UPDATE_PROGRESS);
      intent.putExtra(EXTRA_POSITION, currentValue);
      LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
      在这里,我们使用 LocalBroadcastManager 发送一个广播,因为我们希望这个广播对应用程序保密。
    2. 在您的 Activity 中:


      // this is the broadcast receiver object that will handle our UI updates.
      private BroadcastReceiver mReceiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
      int position = intent.getIntExtra(YourService.EXTRA_POSITION, 0);
      // do your UI updates here.
      }
      }

      @Override
      protected void onResume() {
      // register for the broadcast.
      LocalBroadcastManager.getInstance(this).registerReceiver(
      mReceiver,
      new IntentFilter(YourService.ACTION_UPDATE_PROGRESS));
      super.onResume();
      }
      @Override
      protected void onPause() {
      // unregister when activity is paused.
      LocalBroadcastManager.getInstance(PlayerActivity.this)
      .unregisterReceiver(mPlayerReceiver);
      super.onPause();
      }

如果您发现任何不清楚的地方,请告诉我。

关于android - 当 android 终止后台任务时,AsyncTask postExecute 或 onCancelled 不会被调用 - 不再有后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11734360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com