1

我正在使用一些警报功能每五秒钟产生一次通知。在函数中有变量,每次调用时都应该改变。但是什么也没发生,它只是继续在通知中显示第一组数据。这是来自 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可能会被多个线程访问?在这种情况下,应将其声明为volatile以便编译器跳过任何不适合多线程访问的变量的优化(在这种情况下可能导致错误行为)。

于 2012-09-30T19:11:43.877 回答
0

你在做其他事情x2吗?查看BroadcastReciever 的生命周期文档。每次运行后,您的实例可能TimeAlarm会被杀死onReceive();您需要做一些事情来保持x2运行之间的值。

于 2012-09-30T19:16:54.310 回答