1

いくつかのアラーム機能を使用して、5 秒ごとに通知を生成しています。関数には、呼び出されるたびに変更される変数があります。しかし、何も起こらず、通知に最初のデータ セットが表示され続けます。これは MainActivity クラスからのものです。

public void setRepeatingAlarm(){
    Intent intent = new Intent(this, TimeAlarm.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT);
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), (5 * 1000), pendingIntent);      
}

これは TimeAlarm クラスからのものです。

public void onReceive(Context context, Intent intent) {

    nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    CharSequence from = "Homework";
    CharSequence message = "test"+ MainActivity.arraytest[x2]+ x2;
    x2 +=1;
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,new Intent(context,TimeAlarm.class), 0);
    Notification notif = new Notification(R.drawable.ic_launcher,"Update", System.currentTimeMillis());
    notif.setLatestEventInfo(context, from, message, contentIntent);
    nm.notify(notify_id, notif);
} 

問題は、x2 変数が更新されていないことです。最初に呼び出されたときにのみ更新されます。ありがとう。

4

3 に答える 3

1

x2変数を静的にすることで問題が解決したようです。

于 2012-11-12T16:03:57.017 に答える
0

で何か他のことをしていますx2か? BroadcastRecieverのライフサイクル ドキュメントをご覧ください。のインスタンスが;TimeAlarmを実行するたびに強制終了される可能性があります。実行間onReceive()で値を保持するには、何かを行う必要があります。x2

于 2012-09-30T19:16:54.310 に答える
0

ロングショットかもしれませんが...x2複数のスレッドからアクセスされる可能性があると思いますか? その場合、volatileコンパイラが複数のスレッドによってアクセスされる変数に適していない最適化をスキップするように宣言する必要があります (この場合、間違った動作を引き起こす可能性があります)。

于 2012-09-30T19:11:43.877 に答える