正在寻找从Android处理程序中进行回调的方法
这是我的第一个问题,如果有任何歧义,我很抱歉 我正在寻找一种方法来接收来自Android处理程序的回调 例如,如果处理程序是从活动中调用的,那么接收来自它的回调的正确方式是什么,比如修改该活动中屏幕上的一些文本 谢谢! -叶甫盖尼正在寻找从Android处理程序中进行回调的方法,android,handlers,Android,Handlers,这是我的第一个问题,如果有任何歧义,我很抱歉 我正在寻找一种方法来接收来自Android处理程序的回调 例如,如果处理程序是从活动中调用的,那么接收来自它的回调的正确方式是什么,比如修改该活动中屏幕上的一些文本 谢谢! -叶甫盖尼 public class MyHandler extends Handler{ @Override public void handleMessage (Message msg) { //Do something // ???send bac
public class MyHandler extends Handler{
@Override
public void handleMessage (Message msg) {
//Do something
// ???send back the result to the called activity???
}
}
public class MyActivity extends Activity{
public void callHandler(){
MyHandler handler = new MyHandler();
handler.sendEmptyMessage( 0 );
}
}
在这一点上,从您所展示的内容来看,拥有一个处理程序并没有多大意义。处理程序是一种附加到创建它的线程的机制,主要用于在同一线程中调度任务,因此如果另一个线程调用callHandler,则处理程序将在调用callHandler的线程所在的任何线程中运行。我发现Android IPC最成功的模式是这样的
public class myActivity extends Activity {
public Handler mHandler = new Handler()
public void startAsynchronousTask() {
// Fill in as necessary, or offload responsibility elsewhere
new Thread(new Runnable() {
public void run {
//Do something in the background
...
updateUI(results)
}
}).start();
}
public void updateUI(Results results) {
mHandler.post(new UIUpdater(results));
}
private class UIUpdater implements Runnable {
UIUpdater(Results results) {
//construct whatever...
}
@Override
public void run() {
//Update UI
}
}
}
简言之,它的作用是启动一个异步任务。。。。当该任务完成时,它调用updateUI。updateUI将要执行的代码放入UI线程,以便修改视图等。这样,就异步任务而言,它所要做的就是调用一个方法来更新UI。事实上,事情有点复杂,但它使您的活动界面保持干净,便于用于任何异步任务。您尝试过哪些示例程序?谢谢!这很有趣。为什么需要一个updateUI作为一个处理程序来发布另一个runnable?由于您首先要执行一个异步任务,因此可能只需将UI更新为可运行的一部分即可?其思想是您的异步任务可能不属于activity类的一部分。因此,如果在另一个类中,您将此活动注册为回调,那么另一个类可以调用updateUI,而不必知道处理程序/可运行业务。如果异步任务只是从活动中运行,那么可以从异步任务中发布UIUpdater。额外的方法只是为了代码清晰。酷。我想我喜欢这样。谢谢