2011-12-23 32 views

Trả lời

45

Có, bạn cần phải xem AlarmManager để thiết lập "Báo thức" lặp lại. Điều này là tốt hơn cho tuổi thọ pin trên thiết bị, như không giống như một dịch vụ nó không chạy liên tục trong nền. Báo thức kích hoạt broadcast receiver sẽ thực thi mã tùy chỉnh của bạn.

Lưu ý cuối cùng - có giá trị enum cho thời gian báo thức bao gồm hàng ngày, nửa ngày và nhiều hơn nữa mặc dù bạn chỉ có thể đặt giá trị thực.

Một ví dụ điển hình có thể được tìm thấy trong các sau SO bài:

Alarm Manager Example

Cập nhật

Mới hơn các tính năng đã được thêm vào Android. Nếu bạn đang đọc cái này thì tôi khuyên bạn nên xem xét GcmNetworkManager. Điều này tối ưu hóa tuổi thọ pin và hoạt động trước kẹo que. Đối với Lollipop trở đi, bạn có thể sử dụng JobScheduler. Tôi sẽ khuyên bạn nên sử dụng các lớp này trên AlarmManager.

+0

Cảm ơn, đây là chính xác những gì tôi đang tìm kiếm. – siemian

+0

@Graham Smith Không quan tâm, bạn có viết của riêng mình không? –

+0

@Graham Smith Liên kết bạn cung cấp bị hỏng. Bạn có thể cung cấp liên kết hoạt động không? – Zapnologica

6

Là một thay thế tôi đang so sánh tuần hiện tại:

Calendar cal = Calendar.getInstance(); 
int currentWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR); 

SharedPreferences sharedPreferences= this.getSharedPreferences("appInfo", 0); 
int weekOfYear = sharedPreferences.getInt("weekOfYear", 0); 

if(weekOfYear != currentWeekOfYear){ 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putInt("weekOfYear", currentWeekOfYear); 
    editor.commit(); 
    // Your once a week code here 
} 

tôi không ủng hộ này là tốt hơn so với các giải pháp báo động. Tôi chỉ cho thấy một cách tiếp cận khác.

12

Tôi nghĩ phù hợp nhất là GcmNetworkManager. Về cơ bản nó có mọi thứ bạn cần từ AlarmManager cộng với sự kiên trì, vì vậy công việc có thể tiến hành thực hiện sau khi khởi động lại.

Ví dụ:

PeriodicTask task = new PeriodicTask.Builder() 
     .setService(MyTaskService.class) 
     .setTag(TASK_TAG_PERIODIC) 
     .setPeriod(5L) 
     .build(); 

mGcmNetworkManager.schedule(task); 
+1

Bạn nói đúng - điều này có lẽ sẽ trở thành cách bình thường để làm điều này. Tôi đã viết câu trả lời của tôi cách đây 2,5 năm để mọi thứ tiếp tục. Tôi cho rằng bạn cần phải thêm về Trình lập lịch công việc Lollipop cho Android 5+ vì bạn KHÔNG phải sử dụng 'GcmNetworkManager'. Tôi upvoted btw. –

Các vấn đề liên quan