gpt4 book ai didi

android - 从服务线程调用 Android Activity 的首选方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:27:21 27 4
gpt4 key购买 nike

我目前正在开发具有以下需求的 Android 应用程序:

工作线程在服务中启动。该线程进行一些处理,需要从主 Activity 调用,并为同一个 Activity 提供一些异步响应。

从 Activity 调用服务很容易(IBinder 的东西)

我现在的问题是关于服务回调的正确实现。

我首先要在 Activity 中添加一个 android.os.Handler 并在 MyActivity.handleMessage(Message) 中处理线程的答案,但这需要我为该处理程序提供对该服务的引用。那么当 Android 操作系统决定销毁/重新创建我的 Activity 时会发生什么,例如由于方向改变?我的 Activity 是否在服务中(间接)引用时保持 Activity 状态?如果 Activity 无论如何都被销毁/重建,我在服务中的 Handler 引用会怎样?

我想我没有使用正确的方法从服务线程回调 Activity,所以我想知道是否有人可以指出我正确的做法。

TIA

最佳答案

我更喜欢使用 LocalBroadcastManager

这是您的 Activity 中的代码示例:

BroadcastReceiver localBroadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("BroadcastReceiver", "Message received " + intent.getAction());
Log.d("BroadcaseReceiver", "Received data " + intent.getStringExtra("com.my.package.intent.EXTRA_DATA"));
}
};

@Override
protected void onStart()
{
super.onStart();
final LocalBroadcastManager localBroadcastManager =
LocalBroadcastManager.getInstance(this);
final IntentFilter localFilter = new IntentFilter();
localFilter.addAction("com.my.package.intent.ACTION_NAME_HERE");
localBroadcastManager.registerReceiver(localBroadcastReceiver, localFilter);
}

@Override
protected void onStop()
{
super.onStop();
final LocalBroadcastManager localBroadcastManager =
LocalBroadcastManager.getInstance(this);
// Make sure to unregister!!
localBroadcastManager.unregisterReceiver(localBroadcastReceiver);
}

代码库中的任何其他地方(例如在完成后台线程时):

final LocalBroadcastManager localBroadcastManager =
LocalBroadcastManager.getInstance(context);
final Intent intent = new Intent("com.my.package.intent.ACTION_NAME_HERE")
intent.putExtra("com.my.package.intent.EXTRA_DATA", yourBackgroundData);
localBroadcastManager.sendBroadcast(intent);

当然,您可以使用 intent.putExtra 添加任何额外数据或使用多个操作来区分广播消息。

关于android - 从服务线程调用 Android Activity 的首选方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15413667/

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