Java 当我';我将IntentService与ResultReceiver一起使用

Java 当我';我将IntentService与ResultReceiver一起使用,java,android,multithreading,android-activity,intentservice,Java,Android,Multithreading,Android Activity,Intentservice,我在网上搜索了一下,想找到这个答案。但没有发现结果。 很抱歉,我是Java和Android编程的新手 我想进一步阐述我的问题。假设我的活动启动了一个IntentService,它在后台独立运行。该服务已“订阅”ResultReceiver的回调以更新活动UI。在服务执行长时间运行的过程中,活动被销毁。那么,如果服务通过ResultReceiver向活动发送回复或进度更新,会发生什么 因为据我所知,ResultReceiver需要有活动的引用 在我的项目中,我需要开发一个视频剪辑消息应用程序。当用

我在网上搜索了一下,想找到这个答案。但没有发现结果。 很抱歉,我是Java和Android编程的新手

我想进一步阐述我的问题。假设我的活动启动了一个IntentService,它在后台独立运行。该服务已“订阅”ResultReceiver的回调以更新活动UI。在服务执行长时间运行的过程中,活动被销毁。那么,如果服务通过ResultReceiver向活动发送回复或进度更新,会发生什么

因为据我所知,ResultReceiver需要有活动的引用

在我的项目中,我需要开发一个视频剪辑消息应用程序。当用户捕获视频时,它会将数据传递给服务,服务将执行上传,并将一些信息保存到数据库中。。同时通过ResultReceiver将进度更新发布到活动UI

用户可以根据自己的喜好退出或终止活动。但当他们导航回应用程序/活动时,如果上传/下载仍在进行,则需要显示当前的进度

起初我想到Asynctask,但它也有我提到的类似问题。它需要调用方活动的引用

有什么地方可以达到我提到的要求吗? 抱歉发了这么长的邮件。希望有人能给我一些启发,最好有一些代码片段。 非常感谢:)


编辑:简而言之,是否有一种方法可以将新创建的活动动态绑定到正在运行的IntentService,以便该服务可以将进度更新发送到正确的活动?在活动上使用广播接收器,并分别在
onResume()
onPause()
中注册/注销它。您可以使用
IntentFilter
IntentService
中侦听
Intent

在您的
IntentService
中,为
IntentFilter
创建一个操作值,并在需要更新时发送带有该操作的广播:

public static final String ACTION = "com.example.yourapp.action.ACTION_TAG";

private void handleResult() {
    if (BuildConfig.DEBUG) {
        Log.v(TAG, "handleResult");
    }

    // Broadcast result
    Intent intent = new Intent(ACTION);
    intent.putExtra("your_extra", someValue);
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
在您的
活动中

private BroadcastReceiver mYourReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (BuildConfig.DEBUG) {
                Log.v(TAG, "onReceive");
            }



            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                // Update with content from bundle
            }
        }
    };

     @Override
     public void onResume() {
         super.onResume();

         if (BuildConfig.DEBUG) {
             Log.v(TAG, "onResume");
         }

         // Register broadcast receiver
         LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mYourReceiver, new IntentFilter(YourIntentService.ACTION));
    }

    @Override
    public void onPause() {
         super.onPause();
         if (BuildConfig.DEBUG) {
             Log.v(TAG, "onPause");
         }

         // Unregister broadcast receiver
         LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mYourReceiver);
    }

我这里也有同样的问题。你找到解决这个问题的办法了吗?我也有同样的问题