gpt4 book ai didi

java - 当我将 IntentService 与 ResultReceiver 一起使用时,当我的 Activity 被销毁时会发生什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:50 26 4
gpt4 key购买 nike

我通过网络搜索找到了这个答案。但是没有找到结果。抱歉,我是 Java 和 Android 编程的新手。

我会详细说明我的问题。假设我的 Activity 启动了一个 IntentService 并且它在后台独立运行。该服务“订阅”了 ResultReceiver 的回调以更新 Activity UI。并且在服务执行长时间运行的过程期间,Activity 被销毁。那么,如果服务通过 ResultReceiver 向 Activity 发送回复或进度更新,会发生什么?

因为据我所知,ResultReceiver 需要有一个 Activity 的引用。

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

用户可以根据需要退出或终止 Activity。但是当他们导航回应用程序/Activity 时,如果上传/下载仍在进行中,则需要显示当前进度..

最初我想到了 Asynctask,但它也有我提到的类似问题。它需要调用方 Activity 的引用。

有什么地方可以达到我提到的要求吗?很抱歉这篇文章很长。希望有人能启发我一点,最好有一些代码 fragment 。非常感谢:)

编辑:简而言之,有没有办法将新创建的 Activity 动态绑定(bind)到正在运行的 IntentService,以便该服务可以将进度更新发送到正确的 Activity?

最佳答案

在您的 Activity 上使用 BroadcastReceiver 并分别在 onResume()onPause() 中注册/注销它。您可以使用 IntentFilter 来监听来自 IntentServiceIntent

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

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);
}

在您的 Activity 中:

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);
}

关于java - 当我将 IntentService 与 ResultReceiver 一起使用时,当我的 Activity 被销毁时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27796106/

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