线程和事件

时间:2013-05-13 23:44:16

标签: java android multithreading events

我真的被困在这里,我已经阅读了很多关于Android的线程,但是我找不到适合我的项目的答案。

我有一个前端(管理GUI)和一个后端(管理数据和东西)。我需要在后端完成运行线程后立即更新GUI,但我无法弄清楚如何!

Main.java包前端

public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Thread thread = new Thread() {
        @Override
        public void run() {
            Server server = new Server(getApplicationContext());
        }

    };
    thread.start();

Server.java包后端

public static List<String> lista = new ArrayList<String>();
public Server(Context context) {
    Revisar archivo = New Revisar();
    archivo.DoSomething();
}

archivo.doSomething完成后,我需要使用存储在静态列表中的后端数据更新GUI。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

正如您所推测的那样,您无法从后台线程更新GUI。

通常,要执行所需操作,可以使用消息处理机制将消息传递给GUI线程。通常,您传递将在GUI线程中执行的Runnable。如果您已经为Message创建了子类,并添加了代码来处理消息,也可以传递Handler

消息传递给处理程序。您可以在GUI线程中创建自己的Handler,也可以使用已存在的几个中的一个。例如,每个View对象都包含一个Handler。

或者您可以简单地使用runOnUiThread()活动方法。

模式1,处理程序加运行:

// Main thread
private Handler handler = new Handler();

  ...

// Some other thread
handler.post(new Runnable() {
  public void run() {
    Log.d(TAG, "this is being run in the main thread");
  }
});

模式2,处理程序加消息:

// Main thread
private Handler handler = new Handler() {
  public void handleMessage(Message msg) {
    Log.d(TAG, "dealing with message: " + msg.what);
  }
};

  ...

// Some other thread
Message msg = handler.obtainMessage(what);
handler.sendMessage(msg);

模式3,调用runOnUiThread():

// Some other thread
runOnUiThread(new Runnable() {      // Only available in Activity
  public void run() {
    // perform action in ui thread
  }
});

模式4,将Runnable传递给View的内置处理程序:

// Some other thread
myView.post(new Runnable() {
  public void run() {
    // perform action in ui thread, presumably involving this view
  }
});