アクティビティのUI要素を定期的に更新するワーカースレッドをバックグラウンドで実行するためのベストプラクティスは何ですか?ここでの目標は、あらゆる種類のアップデートでスクリーンがフリーズするのを避けることと、それに続く特定のガイドライン/標準がある場合は避けることです。定期的にUIを更新するためのワーカースレッドを実行するためのベストプラクティス
答えて
バックグラウンド作業のサービスをお試しください。 私はあなたのための例を作った。
これを試してください。
TestActivity.java
public class TestActivity extends AppCompatActivity {
private final String TAG = "TestActivity";
public final static String RECEIVER_ACTION = "com.action.MyReceiverAction";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_work);
registerMyReceiver();
startService(new Intent(this, BackgroundService.class));
}
MyReceiver myReceiver = new MyReceiver();
private void registerMyReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVER_ACTION);
registerReceiver(myReceiver, intentFilter);
}
class MyReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "onReceive() called");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
}
BackgroundService.java
今public class BackgroundService extends Service {
private String TAG = "BackgroundService";
@Override
public void onCreate() {
super.onCreate();
Log.e(TAG, "onCreate() called");
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.e(TAG, "onBind() called");
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand() called");
notifyToUI();
return super.onStartCommand(intent, flags, startId);
}
/**
* This Methd will notify your Activity
*/
private void notifyToUI()
{
Intent myIntent = new Intent();
myIntent.setAction(TestActivity.RECEIVER_ACTION);
sendBroadcast(myIntent);
}
}
終わり
<service android:name=".BackgroundService"/>
ファイルのAndroidManifest.xmlでBackgroundServiceを登録
サンプルコードありがとうございます。これは動作しますが、デフォルトのパワーマネージャを搭載したSamsungデバイスでは、15分程度でクラッシュするようです。パワーマネージャーがバックグラウンドサービスを抹殺するのを防ぐ方法はありますか? – Zishan
あなたのクラッシュログを教えてください。正確な問題を知ることは役に立ちます。 –
AlarmManager(または他のタイマー)を使用して定期的にサービスを開始します。そのサービスはモデルを更新し、例えばLocalBroadcastManagerでUIスレッドに通知します。 UIスレッドは、BroadcastReceiverを使用してIntentを捕捉し、自身を更新することができます。
- 1. UIを更新するためのバックグラウンドでのメソッドの実行
- 2. 更新プログラムのユーザーメールを実装するためのベストプラクティス
- 3. UIスレッドを更新するワーカースレッドのCountdownTimer
- 4. 明示的に動的ルートパラメータを設定するためのベストプラクティス
- 5. UIスレッドで長いプロセスを実行し、進行状況を報告するためにUIを更新する
- 6. 複数のデータベースを更新する移行を管理するためのベストプラクティス?
- 7. マルチセクションテーブルビューを実装するためのベストプラクティス
- 8. 定期的にコードを実行するためのハンドラーpostdelayの使用
- 9. 複数の行をデータベースに挿入して更新するためのベストプラクティス
- 10. 非AWTスレッドのAbstractTableModelでデータを更新するためのベストプラクティス
- 11. 既存のビューに新しいUI要素を追加するためのベストプラクティス
- 12. Pythonスクリプトを実行するためのベストプラクティスは何ですか?
- 13. AWS:静的なS3ページを更新するためのPythonコードの実行
- 14. MVP対MVP2 - JVMでテストを実行するためのベストプラクティス
- 15. セロリでタスクグループを順次実行するためのベストプラクティス
- 16. C++/CLIで定数参照を実装するためのベストプラクティス
- 17. 不確定スピナーを実装するためのベストプラクティス
- 18. メインセンターのUIエレメントを更新するためのNotificationCenterポスト?
- 19. 新しい更新アクションを実行するためのパッチまたはパッチRails
- 20. 同期された領域を認証するためのベストプラクティス
- 21. 実行中のGUI環境でJavaでメソッドを実行するためのベストプラクティス
- 22. Docker実行インスタンスに接続するためのベストプラクティスの再実行
- 23. JavaScript + jQuery WebアプリケーションでモデルデータとUIをリンクするためのベストプラクティス
- 24. 初期データをバックボーンアプリケーションにロードするためのベストプラクティス?
- 25. LOOPのためにdivを動的に更新する
- 26. 電子メールアプリケーションを定期的に送信するためのデザインパターン?
- 27. 定期的にファイルをチェックするためのシェルスクリプト
- 28. サーバからアプリケーションへのデータの同期を実現するためのベストプラクティス(アーキテクチャレベル)
- 29. JavaのArrayListフィールドを初期化するためのベストプラクティス
- 30. 非同期ゲームエンジンループを実装するためのベストプラクティスはありますか?
androidのLocalboadcastManagerでインテントサービスを使用する –