gpt4 book ai didi

android - 从其他类回调 Activity

转载 作者:行者123 更新时间:2023-11-30 04:27:24 25 4
gpt4 key购买 nike

我有 Activity 类、Controller 类(普通 java 类用于控制 Activity 数量)和 BusinessEngine 类(普通 java 类使用处理数据)。

当我需要从 Activity 做一些计算时,Activity 将调用 ControllerController 将调用 BusinessEngine做计算。当 BusinessEngine 完成计算后,它会将值传回给 Controller,最后让 Activity 知道计算已完成。

问题是我如何从 Controller 类回调 Activity ?或者将任何数据传递给 Activity 并通知它数据已更改?

最佳答案

任何“长时间”运行的任务都必须在后台线程中执行。我不确定您目前是否正在为您的任务执行此操作,以防万一,有几种方法可以执行此操作。第一种是简单地使用 AsyncTask ,第二个是创建自己的 AbstractExecutorService 实例(AsyncTask 使用 ThreadPoolExecutor )并使用它来发布 RunnableCallables到。根据您的代码库,后一种方法可能会为您节省大量重构工作。

假设您现在正在后台线程中运行任务,则有必要在 UI 线程上执行 UI 更新。还有几种方法可以做到这一点。一种方法是将可运行对象发布到方法 Activity#runOnUiThread ,第二个是使用 Handler它之前是在 UI 线程上创建的(Activity#runOnUiThread 在幕后执行)。

因此,假设您的 Activity 有方法#postResults(final Object o),而您的 Controller 有方法#doSomething(final Activity activity)。

您的 Activity 看起来像这样。

public class MyActivity extends Activity {
Controller controller = ....
ExecutorService service = Executors.newFixedThreadPool(10);

private void startTask() {
Runnable r = new Runnable() {
public void run() {
c.doSomething(MyActivity.this);
}
}
service.submit(r);
}

public void postResults(final Object o) {
Runnable r = new Runnable() {
public void run() {
// Update your UI here
}
}
runOnUiThread(r)
}

}

和你的 Controller

public class Controller {

public void doSomething(final Activity activity) {
// Perform some long running task here
activity.postResults(someObject);
}
}

显然这个例子可以被整理(例如传递一个接口(interface)给 doSomething 而不是 Activity),但希望它应该足以理解你需要做什么:)

关于android - 从其他类回调 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8251674/

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