2010-02-24 42 views
26

Vì vậy, tôi hiện đang hiển thị một thông báo. Khi người dùng nhấp vào thông báo này, ứng dụng sẽ được bắt đầu. Thông báo vẫn tiếp tục, để cho biết dịch vụ đang chạy ở chế độ nền.Bắt đầu Hoạt động qua thông báo: Tránh các hoạt động trùng lặp

Intent notificationIntent = new Intent(context, LaunchActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
mNotificationManager.notify(1, notification); 

Tuy nhiên, tôi đã phát hiện trường hợp lỗi xuất hiện. Nếu người dùng khởi động ứng dụng thông qua việc nhấp vào biểu tượng bình thường và trong khi hoạt động đang chạy nhấp vào thông báo thì một hoạt động mới sẽ bắt đầu mà không có lần thoát trước đó, sau đó sẽ xuất hiện trên đầu trang. Và đó không phải là tất cả: Các nhấp chuột khác vào thông báo sẽ tạo các hoạt động bổ sung và đặt chúng lên trên những hoạt động đã chạy. Làm thế nào tôi có thể ngăn chặn điều này? Có một kiểm tra tốt đẹp để làm gì để xem một hoạt động nào đó hiện đang được hiển thị hoặc được tải không?

Trả lời

10

Khi sử dụng lanchMode="singleTask", nếu một thể hiện của hoạt động của bạn đã tồn tại, Android không tái tạo Hoạt động nhưng khởi động nó với phương pháp onNewIntent().

Như ghi nhận bởi Android:

Hệ thống này tạo ra hoạt động tại thư mục gốc của một nhiệm vụ mới và các tuyến đường ý định nó. Tuy nhiên, nếu một cá thể của hoạt động đã tồn tại, hệ thống sẽ định tuyến ý định đến cá thể hiện có thông qua một cuộc gọi đến phương thức onNewIntent() của nó, chứ không phải tạo một phương thức mới.

Android documentation for activity mode

2

Khi hai câu trả lời trên đã đề cập, bạn sẽ muốn thiết lập chế độ khởi động của ứng dụng được định nghĩa trong định nghĩa của hoạt động trong biểu hiện:

<activity 
    android:name="com.company.ActivityName" 
    android:launchMode="singleTask"> 
</activity> 

Ngoài ra, bạn có thể muốn lưu ý rằng mặc dù FLAG_ACTIVITY_SINGLE_TOP là cờ Ý định hợp lệ, không có cờ ý định tương đương cho singleTask hoặc singleInstance.

Xem phần launchMode để biết thêm chi tiết về các tùy chọn chế độ khởi động khác nhau: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

+1

là FLAG_ACTIVITY_NEW_TASK không tương đương với singleTask? – CopsOnRoad

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