1

我真的被困在这里,我已经阅读了很多关于 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。

有什么建议么?

4

1 回答 1

0

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

通常,为了做您想做的事,您使用消息处理机制将消息传递给 GUI 线程。通常,您传递将在 GUI 线程中执行的Runnable 。如果您将处理程序子类化添加了处理消息的代码,您也可以传递消息。

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

或者你可以简单地使用runOnUiThread () Activity 方法。

模式 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 的内置 Handler:

// Some other thread
myView.post(new Runnable() {
  public void run() {
    // perform action in ui thread, presumably involving this view
  }
});
于 2013-05-13T23:56:17.797 回答