2009-10-29 20 views
5

Tôi muốn tự động lên lịch một chuỗi với một khoảng thời gian cụ thể. Tôi cũng cần phải thực hiện điều này trong nền liên tục mà không bị treo vào thiết bị.Tôi làm cách nào để lên lịch một chuỗi cụ thể trong Blackberry

Tôi đã thử điều này với Lớp Trình quản lý Ứng dụng nhưng nó dành cho lập lịch ứng dụng và tôi cần lên lịch chuỗi trong ứng dụng.

Trả lời

6

Tôi sẽ sử dụng TimerTask:

public class MyScreen extends MainScreen { 
    private Timer mTimer; 
    public MyScreen() {   
     mTimer = new Timer(); 
     //start after 1 second, repeat every 5 second 
     mTimer.schedule(mTimerTask, 0, 5000); 
    } 

    TimerTask mTimerTask = new TimerTask() { 
     public void run() { 
      // some processing here 
     } 
    }; 
} 

thấy BlackBerry API Hidden Gems (Part Two)

0

Miễn là ứng dụng đang chạy - chỉ cần tạo chuỗi và sau mỗi bit cuộc gọi công việc Thread.sleep cho đến chừng nào bạn cần nó ở trạng thái không hoạt động.

Nếu bạn cần nó để đánh thức lên tại một thời điểm cụ thể, chứ không phải chỉ ngủ một thời gian cụ thể, sau đó bạn có thể làm một cái gì đó như sau:

Date wakeUpAt = ...; // Get this however 
Date now = new Date(); 
long millisToSleepFor = wakeUpAt.getTime() - now.getTime(); 
Thread.sleep(millisToSleepFor); 
+0

Cảm ơn, nhưng trong giấc ngủ nó treo cứng trong thời gian nhất định (dài millisToSleepFor) thời gian. – Rishabh

+0

Bạn có nói rằng trong khi Chủ đề đang ngủ, thiết bị không lên lịch bất kỳ chủ đề nào khác không? Toàn bộ điểm của sleep() là thread không được lên lịch trên CPU trong khoảng thời gian đó ... –

2

sử dụng UiApplication.getUiApplication().invokeLater() nó chấp nhận một sự chậm trễ và lặp lại các thông số và sẽ thực hiện chính xác những gì bạn cần.

EDIT

Tôi biết bài này là cũ nhưng điều này đến nay là lựa chọn tốt nhất để sắp xếp sự kiện lặp lại và tôi muốn thêm rằng để ngăn chặn các sự kiện theo lịch trình sau đây là cần thiết:

//Start repeating "runnable" thread every 10 seconds and save the event ID 
int eventId = UiApplication.getUiApplication().invokeLater(runnable, 10000, true); 

//Cancel the repetition by the saved ID 
UiApplication.getUiApplication().cancelInvokeLater(eventId); 
+0

Phải, nhưng có cách nào mà thread bắt đầu excute sau khi thoát khỏi ứng dụng tại một độ trễ nhất định cho ví dụ trễ 1 ngày. – Rishabh

+0

bạn có thể thêm UiApplication.getUiApplication(). RequestBackground(); trong phương thức onClose() của bạn để thoát khỏi ứng dụng đang chạy ở chế độ nền nhưng (afaik) bất kỳ chuỗi nào bạn bắt đầu từ quan điểm ngữ cảnh ứng dụng sẽ bị giết sau khi nó được đóng đúng cách, bao gồm các chuỗi đã được lên lịch. – Lisandro

1

Giả sử bạn muốn chạy một chuỗi khi khởi động thiết bị: Tạo một dự án thứ hai và liệt kê nó là một điểm vào thay thế. Trong UiApplication hoặc Application main() của bạn, hãy kiểm tra đối số được truyền cho dự án. Làm công cụ định kỳ của bạn ở đó thông qua Thread.sleep và không gọi enterEventDispatcher.

tìm kiếm cho "autostart": http://docs.blackberry.com/en/developers/deliverables/1076/development.pdf

Hoặc nếu bạn muốn làm điều gì đó khi người dùng "bắt đầu" nó, sau đó nhìn vào việc tạo ra một chủ đề mới để làm công cụ thời gian của bạn. Ghi đè lên màn hình của bạn onClose() và sử dụng Application.getActivation(). Tắt() để ném màn hình vào nền.

Hoặc có một cách khác để làm điều gì đó như thế này như invokeLater, v.v. Có thể danh sách sự kiện có thể làm những gì bạn cần, nhưng bạn không đưa ra nhiều chi tiết.

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