2025.08.29
Laravelで空判定にif文を使うとハマる理由
2019.06.26
プログラミングAndroid BluetoothLeScanner でくそ重くなる

坂東です。
AndroidでBLEの信号を取得したければ BluetoothLeScanner を使います。
すると一定間隔で ScanCallback.onScanResult に値が入ってくるというわけです。
機器や端末によってはonScanResultの呼ばれる頻度が半端ありません。
50ms間隔とか。
そうするとものすごく重いです。
とくに何もしない以下のようなサンプルコードでも、徐々に端末が重くなりフリーズします。
scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, final ScanResult result) {
super.onScanResult(callbackType, result);
BluetoothDevice bluetoothDevice = result.getDevice();
})
}
対策としてはonScanResultの内部処理を別スレッドで動かすことです。
scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, final ScanResult result) {
super.onScanResult(callbackType, result);
new Thread(new Runnable() {
@Override
public void run() {
BluetoothDevice bluetoothDevice = result.getDevice();
}
}).start();
})
}
なにも考えないとUIスレッドで処理するわけですが、UIはシングルスレッドなので処理が滞留して徐々に重くなっていくという訳のようですね。
おわり。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
1
2025.08.29
Laravelで空判定にif文を使うとハマる理由
2

2025.08.29
Git SSH接続でfetch/pullができなくなった時の対処法
3

2025.08.28
【体験談】Amazon Linux 2でMySQLインストール時のOpenSSL・GPG key エラーにハマった話
4
2025.08.28
【AWS】SSMポートフォワーディングとInstance Connectを利用したプライベートEC2へのSSH接続手順
5
2025.07.24
Log::info()が使えない!?Laravel.logのPermission denied エラーを解決する(Docker環境)
タグ検索