0

私は、ビデオを再生する小さなクライアントジョブのために、ほとんど 24 時間年中無休で実行される Android キオスクアプリを構築しています。ただし、ある時点で電源が切れる可能性があることを発見しました。これは、電源が切れたときにタブレットがアプリの実行を停止する (または少なくとも画面のキープアライブを削除する) 必要があることを意味し、設定をリセットする必要があることを意味します。電源が再びオンになるため、デバイスが完全に停止することはありません。私は以前に少し Android の作業を行ったことがありますが、このようなものはありません。アクティビティが 1 つしかなく、ブロードキャスト レシーバー (マニフェスト ファイルに登録したもの) で onReceive 呼び出しに状態を受信したときにアクティビティが実行されることを考えると、ベスト プラクティス/最も慣用的な方法は何ですか?その変更された状態をアクティビティに伝えるには?

私が見た現在の方法では、アクティビティへの静的参照をアクティビティで公開し、それを使用してアクティビティと通信します (アプリのライフサイクルに応じて、self または null として適切に設定します)。それが最も効果的な方法ですか?

4

2 に答える 2

0

最も簡単な方法はObserver/Observable、パターンを作成することです。ここで、をBroadcastReceiver実装しObservable、すべての関係者に変更について通知します。電力の変更に関心のあるアクティビティ(または他のクラス)は、として登録し、何かが発生したときにObserverそれらの関数を介して呼び出される可能性があります。update()

Observer登録を解除することを忘れないでonPause()ください。そうすれば、デッドアクティビティが呼び出されることはありません。

于 2013-03-21T23:39:05.507 に答える
0

@Hoan Nguyenは正しいです。アクティビティはバッテリー イベントに登録できます。次に例を示します。

public class Test extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final TextView text = new TextView(this);
        setContentView(text);
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
                boolean charging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
                text.setText(charging ? "Charging" : "On battery");
            }
        }, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    }
}

@lenik は、onCreate() ではなく onResume()/onPause() で登録/登録解除する必要があることもおそらく正しいですが、上記で始める必要があります。

于 2013-05-12T17:42:18.813 に答える