たくさんのスニペットとチュートリアルを読んだので、私はまだ(またはそれ以上に)進むべき道について混乱しています。ソケットで着信イベントをリッスンし、UIThreadに着信を報告するスレッド/バックグラウンドタスクが必要です。選択するための好ましい方法は何でしょうか?独自のスレッドまたはマルチタスク?データをメインスレッドに転送する最良の方法は?
問題についての考えに感謝します。
よろしく、マーカス
以下のあなたの答えを考慮して、私は以下を試しました:
主な活動:
public class MainActivity extends Activity {
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
toastSomething();
};
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
threadstarter();
}
protected void threadstarter() {
super.onStart();
Thread backgroundthread = new Thread(new WorkerThread(handler));
backgroundthread.start();
}
public void toastSomething() {
Toast.makeText(this, "hello", Toast.LENGTH_SHORT).show();
} }
私のランナブル:
public class WorkerThread implements Runnable {
Handler messageHandler;
WorkerThread(Handler incomingHandler) {
messageHandler = incomingHandler;
}
public void run() {
while (true) {
for (int i = 0; i <= 100000; i++) {
// wait a moment
}
messageHandler.sendEmptyMessage(1);
}
} }
私のレイアウトには追加のチェックボックスしかありません:
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBox" />
良いことは、トーストが表示されることです。悪いことに、cehckboxが応答せず、アプリがすぐにクラッシュします。そうではないですか、それはどのように行われるべきですか?
編集:例外が言うように、WorkerThreadのsendMessageのメッセージはトラブルメーカーのようです、メッセージはすべて使用中に読み取られますか?