0

我每 5 分钟检查一次位置数据。我在每五分钟调用一次的服务中实现了这一点。在主要活动中,我有两个按钮来启动/停止警报。这是实施锁的最佳场所吗..

 startService.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            // add a notification when the BG service is started..

            Intent myIntent = new Intent(ContextActivity.this, MyAlarmService.class);
            pendingIntent = PendingIntent.getService(ContextActivity.this, 0, myIntent, 0);

                        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

                        Calendar calendar = Calendar.getInstance();
                        calendar.setTimeInMillis(System.currentTimeMillis());
                        calendar.add(Calendar.SECOND, 10);
                       // alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
                        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 5, pendingIntent);

               Toast.makeText(ContextActivity.this, "Start Alarm", Toast.LENGTH_LONG).show();
               System.out.println("Alarm started");
        }

    });

    stopService.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
               alarmManager.cancel(pendingIntent);

                        // Tell the user about what we did.
                        Toast.makeText(ContextActivity.this, "Cancel!", Toast.LENGTH_LONG).show();
                        System.out.println("Stop alarm");
        }
    });

是否可以在启动时获取锁并在停止时释放锁?

4

1 回答 1

2

你不应该为此需要唤醒锁。

您已经在使用alarmManager.setRepeating(AlarmManager.RTC_WAKEUP...which 作为文档状态:

System.currentTimeMillis() 中的闹钟时间(UTC 挂钟时间),它会在设备关闭时唤醒设备。

因此,当它触发时,您的闹钟已经为您唤醒了设备。如果您觉得您的服务在设备重新进入睡眠状态之前无法完成其工作,那么您应该获取服务内部的唤醒锁并在完成工作后释放它。

于 2012-08-19T04:34:19.967 回答