3

このコードが機能するかどうかを知りたいです (今すぐ試すことはできません。さらに、クリアしなければならない疑問がいくつかあります)。

Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra("user",global.getUsername());
intent.puExtra("password",global.getPassword);
PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
Log.v("inside log_run", "new service started");
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, IMMEDIATELY,60000,sender);
finish();

ご覧のとおり、このコードは で始まりAlarmManagerますsetRepeating()。インテント (実際には保留中のインテント) が に渡されているBroadcastReceiver場合は、2 つのエクストラが渡されています。これらは、アプリケーションが実行されている限り存続するグローバル変数です。しかし、これAlarmManagerはバックグラウンドで実行されることを意図しています (つまり、アプリケーションはブロードキャスト受信者への alrmamanager の最初の数回の呼​​び出しに対してのみ有効です)
私の質問
AlarmManager はグローバル変数 (ユーザー名とパスワード) のコピーを作成しますか?このコピーを維持して、インテントとともに (エクストラとして) 渡されるようにしますか? それとも、グローバル変数を参照しますか (プロセスで、グローバル変数が null になったときにエクストラとして null を渡します)? なぜなら、これらの値は放送受信機で使用されるからです。

4

2 に答える 2

2

この方法に起因する問題が見られます。私がすることは、2 つの変数を SharedPrefs ファイルに保存し、BroadcastReciever から直接アクセスすることです。SharedPrefs の値は保持されますが、Android の「グローバル変数」は保持されません。

于 2012-09-04T05:31:01.180 に答える
0

アラーム マネージャでは、単純に getApplicationContext をパラメーターとしてヘルパー コンストラクターに渡します。

于 2014-04-30T04:13:32.703 に答える