gpt4 book ai didi

java - 我可以在另一个类中发送自定义事件或调用另一个方法而不等待结果吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:44 25 4
gpt4 key购买 nike

我想将自定义事件(或调用另一个方法)发送到另一个类而不等待响应?

我能解释的最好方法是使用 Windows SDK 方法。它使您能够“将消息发布到另一个窗口”(WM_POSTMESSAGE)。该功能的特点是消息进入操作系统的消息队列,这也是我想要的部分。因此您不必等待响应,您的应用程序可以继续运行。

所以,我在 A 类中有一个方法正在执行某些操作,并且在某些时候它想要模拟 B 类中的 OnClick 事件,但不等待结果,因为该方法还有更多工作要做。

这可能吗?

抱歉问了这么长的问题。

最佳答案

您可以使用LocalBroadcastManager ,我相信这与您正在寻找的最相似。

与评论中的建议相反,我认为启动 Thread 来调用方法在这里不是一个好的模式。

<小时/>

让您的发送者通过上述组件发送信号:

final Intent intent = new Intent();
intent.setAction(FILTER_VALUE);
// put your data in intent
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);

哪里

public static final String FILTER_VALUE= "com.you.yourapp.MY_SIGNAL";
public static final IntentFilter SIGNAL_FILTER = new IntentFilter(FILTER_VALUE);

任何想要接收信号的人都应该实现一个BroadcastReceiver

this.localBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Do what you have to do here... call you method
}
}

如果您使用 Android 的框架类(Activity、Fragment、Service...),您应该遵循标准生命周期模式来注册和取消注册接收器:

@Override
protected void onResume() {
// Listen if someone sends data
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(this.localBroadcastReceiver, SIGNAL_FILTER);
}

@Override
protected void onPause() {
// I'm going to the background / or being destroyed: no need to listen to anything anymore...

LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(this.localBroadcastReceiver);
}

否则在对象初始化时注册它应该是正确的方法。

我相信这就是您正在寻找的消息传递系统。

关于java - 我可以在另一个类中发送自定义事件或调用另一个方法而不等待结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49504133/

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