2010-11-08 35 views
8

Tôi đang gặp phải sự cố đặc biệt với một ứng dụng có nhiều Hoạt động. Tôi có một lớp quản lý màn hình được ràng buộc với một dịch vụ. Dịch vụ này thăm dò ý kiến ​​một máy chủ cho dữ liệu. Trình quản lý màn hình bắt đầu Hoạt động A, B hoặc C, dựa trên dữ liệu. Nó cũng sẽ cho phép người dùng chọn hiển thị các Hoạt động khác hoặc nó có thể hoán đổi một Activity tự động dựa trên dữ liệu mới từ dịch vụ. Hiện tại, tất cả điều hướng đều hoạt động tốt và nếu người dùng nhấn Home, Hoạt động áp dụng sẽ quay trở lại nền trước khi người dùng nhấn biểu tượng ứng dụng từ màn hình chính Android hoặc danh sách ứng dụng chạy gần đây.Android, cờ Intent nào được đề xuất cho Hoạt động bắt đầu bằng Thông báo

Sau đó, tôi phải triển khai tính năng mới để hiển thị biểu tượng và thông báo. Lần đầu tiên tôi triển khai điều này bằng cách chỉ hiển thị thông báo khi các Hoạt động không còn hiển thị bằng cách đặt nó trong mỗi Hoạt động tạm dừng. Làm việc như một sự quyến rũ và đưa cho người dùng tùy chọn thứ ba để hiển thị lại ứng dụng sau khi nhấn nút Home. Tuy nhiên, nếu dữ liệu từ máy chủ (khi ứng dụng không được hiển thị) khiến trình quản lý màn hình cập nhật Hoạt động được hiển thị, tôi có vấn đề. Tôi nghĩ rằng hoạt động của tôi ngăn xếp là nhận được hơi say lên. Kể từ đó, tôi đã thử một mô hình khác mà Trình quản lý màn hình xử lý các thông báo và luôn hiển thị thông báo, cập nhật thông báo bằng Mục đích mới bất cứ khi nào Hoạt động được cập nhật nhưng vẫn không cắt được.

Khi ứng dụng được thu nhỏ và thay đổi dữ liệu tôi có thể thấy trình quản lý màn hình gọi startActivityForResult trên Hoạt động mới và có vẻ như Android biết chúng tôi đang thu nhỏ và không hiển thị Hoạt động. Sau đó tôi có thể gọi Trình quản lý màn hình để hoàn tất trên Hoạt động hàng đầu cũ.

Mỗi Hoạt động hiện có cờ được đặt thành singleTop trong tệp kê khai và FLAG_ACTIVITY_SINGLE_TOP trong mã. Khi dữ liệu không thay đổi trên máy chủ, tôi kéo ứng dụng sao lưu bằng bất kỳ điều nào ở trên tôi nhận được những gì tôi mong đợi và onNewIntent của Activity được gọi. Tuy nhiên, khi dữ liệu đã thay đổi và người dùng gọi lên ứng dụng thông qua thông báo, nó gọi các Hoạt động trênCreate. Hoạt động này xuất hiện và chạy, nhưng sau đó nhấn trở lại đưa tôi đến những gì có vẻ như một trường hợp khác của cùng Hoạt động thay vì thoát. Tôi chỉ cần xem xét kỹ hơn logcat của tôi và tôi thấy 2 cuộc gọi đến onResume của Activity, nhưng sau đó không tăng gấp đôi sau đó.

Tôi cảm thấy có lẽ tôi chỉ thiếu một thứ đơn giản như một ý định gắn cờ khác trên ý định của thông báo? Cảm ơn mọi ý tưởng!

Trả lời

5

Điều gì đang giết tôi là dữ liệu từ máy chủ thay đổi khi không được hiển thị.

Tôi không biết ý nghĩa của điều này.

Tôi cảm thấy có lẽ tôi chỉ thiếu thứ gì đó đơn giản như một ý định gắn cờ khác trên ý định của thông báo?

Tôi đã sử dụng Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP để xử lý vấn đề "có vẻ như một trường hợp khác của cùng một hoạt động", nhưng trong trường hợp của tôi, tôi đã có một ứng dụng hoạt động đơn lẻ.

Các tài liệu cho FLAG_ACTIVITY_CLEAR_TOP cũng nói:

"chế độ ra mắt này cũng có thể được sử dụng để hiệu quả tốt kết hợp với FLAG_ACTIVITY_NEW_TASK: nếu được sử dụng để bắt đầu hoạt động thư mục gốc của một nhiệm vụ, nó sẽ mang lại bất kỳ trường hợp hiện đang chạy của tác vụ đó lên nền trước và sau đó xóa nó thành trạng thái gốc của nó. Điều này đặc biệt hữu ích, ví dụ, khi khởi chạy một hoạt động từ trình quản lý thông báo."

Ngoài ra còn có FLAG_ACTIVITY_REORDER_TO_FRONT:

" Ví dụ, hãy xem xét một nhiệm vụ bao gồm bốn hoạt động: A, B, C, D. Nếu D gọi startActivity() với Intent mà giải quyết với thành phần hoạt động B, sau đó B sẽ được đưa lên mặt trước của ngăn xếp lịch sử, với thứ tự kết quả này: A, C, D, B. Cờ này sẽ bị bỏ qua nếu FLAG_ACTIVITY_CLEAR_TOP cũng được chỉ định. "

Có lẽ một trong những mẫu đó phù hợp

+0

"Điều gì đang giết tôi là dữ liệu từ máy chủ thay đổi khi không được hiển thị." Rất tiếc, không nên sử dụng tiếng lóng. như cố gắng nói là nó hoạt động tốt - ngoại trừ 0 khi người quản lý màn hình được yêu cầu thay đổi Hoạt động được hiển thị và tôi thấy điều đó rất bực bội. Cảm ơn lời khuyên của bạn, tôi sẽ thử lại bằng cách sử dụng cờ bổ sung đó. – bursk

+0

cảm ơn ý tưởng, nhưng thiết lập cờ đó dường như không thay đổi hành vi. – bursk

+0

Tôi nghĩ rằng tôi đã phát hiện ra lý do khiến đề xuất của bạn dường như không hoạt động. Tôi nghĩ rằng một chủ đề nền khác đã ngăn chặn cuộc gọi đầu tiên bắt đầu hoạt động từ khi thực thi vì vậy khi ý định từ thông báo kích hoạt nó không thấy hoạt động trên đầu stack. Vì vậy, Activity sẽ tự tạo và hiển thị. Sau đó, khi tôi loại bỏ nó bằng cách sử dụng nút quay lại, nó được lấy ra khỏi ngăn xếp. – bursk

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