9

私は、Bluetooth経由でデータを継続的に送信し続ける必要があるAndroidプログラムを作成しています。今、私は次のようなものを使用しています:

for(;;)
{
//send message
}

これは機能しますが、UI とアプリをフリーズします UI をフリーズせずに同じものを実装するにはどうすればよいですか?

データを監視しているので、アプリがデータを送信していると確信しています。

4

4 に答える 4

7

ループを、AsyncTaskServiceのスレッドを使用して、またはアクティビティの横にある別のスレッドに配置します。メイン (UI) スレッドで重い作業、無限ループ、または呼び出しのブロックを行わないでください。

于 2012-07-02T14:00:44.140 に答える
0

サービスを実行するためのバックグラウンド スレッドを作成する 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();
}
于 2012-07-02T14:13:36.520 に答える
0

ANR を防ぐために、作業を別のスレッド (UI スレッド以外) に移動する必要があります。

new Thread( new Runnable(){
        @Override
        public void run(){
            Looper.prepare();
            //do work here
        }
    }).start();

上記は簡単で汚れた方法です。ほとんどの場合、推奨される方法は AsyncTask を使用することです

于 2012-07-02T14:00:18.843 に答える