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を渡します。Handlerをサブクラス化し、メッセージを処理するコードを追加した場合は、 Messageを渡すこともできます。

メッセージはハンドラーに渡されます。GUI スレッドで独自の Handler を作成するか、既存のいくつかの 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 をビューの組み込み 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 に答える