0

我正在做一个个人组织者。从日历中,用户可以选择日期,然后可以指定一个特定小时的日期。在这个日期和时间,应用程序应该显示另一个活动,即通知。用户一天只能做一个笔记。所以每个音符的pk是YYYYMMDD。

所以,我想知道我所做的是对还是错。我有一项以应用程序启动的服务。该onStartCommand服务检查当前日期数据库中是否有注释,如果有,他调用活动通知。我有一个可运行的线程,每分钟循环一次,它会更新服务的日期,因为日期onStartCommand是静态的。如果 runnable 获得的日期等于onStartCommand's date 然后继续循环,否则我再次启动服务:

Intent myIntent = new Intent(Receiver.this, NotificaSuoneria.class);
startActivity(myIntent);

这样我没有任何麻烦,但我想知道可运行线程是否可以被android杀死,因为如果被杀死我无法检查其他日子的警报。

而且,当我每次更新日期重新启动服务时,旧的可运行线程会被杀死还是会有很多线程?

PS我不使用AlarmManagerfor安排警报。如果 datenow 与警报有一些联系,我会计算剩下的时间并在这段时间内睡觉,然后我将启动通知活动。对不起我糟糕的英语。

4

1 回答 1

0

您应该为此使用 AlarmManager 并使用如下循环edited

try {
            cntxt = createPackageContext("your.app.package",CONTEXT_IGNORE_SECURITY);
           } catch (NameNotFoundException e) {
              // handle exception here
              e.printStackTrace();
           }

Intent myIntent = new Intent(cntxt , yourreciever.class);
    PendingIntent pi;
    AlarmManager alarmManager;
        for(int i=0;i<=timesinday;i++)
        {
        pi=PendingIntent.getBroadcast(cntxt, i,myIntent, 0);

        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                                        alarmManager.set(AlarmManager.RTC_WAKEUP, currentcal.getTimeInMillis(),pi);

        }

不要忘记在 Android Menifest 中添加 NotificaSuoneria 作为接收器。如果你想让闹钟每天响起,你应该使用

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,todaycal.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);

@Meesta我正在编辑你不必在这里提及活动的答案,Intent myIntent = new Intent(Receiver.this, here.class);这里将是接收者类,你可以从那里开始你的活动,另见http://androidword.blogspot.in/2010/10/how-to-use- broadcast-receiver.html并尝试在从广播接收器启动活动时添加 flag_new_activity

于 2012-07-29T10:43:47.870 回答