私は、Bluetooth経由でデータを継続的に送信し続ける必要があるAndroidプログラムを作成しています。今、私は次のようなものを使用しています:
for(;;)
{
//send message
}
これは機能しますが、UI とアプリをフリーズします UI をフリーズせずに同じものを実装するにはどうすればよいですか?
データを監視しているので、アプリがデータを送信していると確信しています。
私は、Bluetooth経由でデータを継続的に送信し続ける必要があるAndroidプログラムを作成しています。今、私は次のようなものを使用しています:
for(;;)
{
//send message
}
これは機能しますが、UI とアプリをフリーズします UI をフリーズせずに同じものを実装するにはどうすればよいですか?
データを監視しているので、アプリがデータを送信していると確信しています。
サービスを実行するためのバックグラウンド スレッドを作成する IntentService を開始します。@YellowJK が示唆するように Looper.prepare() を呼び出しますが、何かが発生するのをプログラムで待機する必要がある場合は Looper.loop() を呼び出します。殺されません。
@Override
protected void onHandleIntent(Intent arg0) {
Looper.prepare();
//Do work here
//Once work is done and you are waiting for something such as a Broadcast Receiver or GPS Listenr call Looper.loop() so Service is not killed
Looper.loop();
}
ANR を防ぐために、作業を別のスレッド (UI スレッド以外) に移動する必要があります。
new Thread( new Runnable(){
@Override
public void run(){
Looper.prepare();
//do work here
}
}).start();
上記は簡単で汚れた方法です。ほとんどの場合、推奨される方法は AsyncTask を使用することです