在UI和后台线程之间进行通信

时间:2012-10-15 07:49:04

标签: android multithreading

这是我第一次制作一个相当大的应用程序,其中有很多部分。

我希望将UI和后台进程保留在不同的类中以避免混淆。但是,我如何以最佳方式在它们之间进行通信。到目前为止,我遇到了一些方法:

  1. 在不同的类中声明后台线程,并在UI线程中定义其onPostExecute()方法。

        new SetupDefaultFeeds(context) {
        @Override
        protected void onPostExecute(List<Feed> result) {
            default_feeds = result;
    
            for (Feed t : result) {
                String log = t.toString();
                Log.d("DEFAULT feed", log);
            }
            menu_btn[0].performClick();
        }
    }.execute();
    
  2. 使用背景和UI线程之间的标志变量进行信号传递。

  3. 线程和处理程序。

  4. 还有其他方式,最好的方法是什么。谢谢!

1 个答案:

答案 0 :(得分:1)

通过Handler传递消息通常是执行此操作的最“Android-ish”方式。尝试通过标志变量进行所有通信很可能会非常令人头疼。

编辑:Android本身并没有提供将两个类链接在一起的方法,您需要手动完成。一种非常有效的方法是为您的通信创建一个接口,并让UI类或后台线程实现它。然后,在创建类时,您可以将引用传递给另一个对象并通过该接口进行通信。

但是,如果要完全解耦这两个类,可能需要使用BroadcastReceiver,并使用它在UI和后台线程之间发送消息。