2012-06-06 9 views
7

Giả sử chúng ta có hai hoạt động.

A - hoạt động chính, đó là "bộ khởi động tại nhà" (bộ lọc ý định thích hợp v.v.)

B - hoạt động gốc nhiệm vụ với đặc tả singleTask (có thể chỉ có một trường hợp hoạt động này) và với taskAffinity tùy chỉnh phân biệt nếu từ gốc nhiệm vụ chính).Làm thế nào để loại bỏ hoạt động singleTask với taskAffinity từ các nhiệm vụ gần đây khi nó được hoàn thành?

Giả sử B đại diện cho một tác vụ, chỉ có hiệu lực khi nó chưa hoàn thành - quay lại hoặc bắt đầu lại từ các tác vụ gần đây sau khi hoàn thành nó không phải là một tùy chọn.

Trong một số thời điểm - A bắt đầu B để bắt đầu tác vụ mới. Mục đích là để loại bỏ B khỏi danh sách nhiệm vụ gần đây khi người dùng kết thúc B. Người dùng có thể điều hướng từ B đến các nhiệm vụ khác (sử dụng báo chí nhà dài) và sau đó điều hướng trở lại B miễn là nó chưa hoàn tất. Việc khởi chạy A từ trình khởi chạy sẽ không mang B đến tiền cảnh vì chúng có các mối quan hệ công việc khác nhau.

Android nhận dạng B là gốc của tác vụ, do đó B hiển thị trong danh sách nhiệm vụ gần đây ngay cả khi nó kết thúc và người dùng luôn có thể quay lại. Nó không phải là một giải pháp để di chuyển B đến một nhiệm vụ với A, bởi vì trong thời gian B đang chạy - người dùng sẽ có thể chuyển đổi giữa các nhiệm vụ A và B. Thêm excludeFromRecents vào tệp kê khai của B loại bỏ hoàn toàn khỏi danh sách nhiệm vụ gần đây và đó cũng là giải pháp tồi.

Làm cách nào để đạt được điều đó? (Xin lỗi vì tiếng xấu của tôi)

+0

Kết thúc cuộc gọi() trong onResume() khi công việc kết thúc không đúng? – pawelzieba

+0

Nhưng nó vẫn nằm trong danh sách nhiệm vụ gần đây –

+0

@MichaelP Bạn có muốn nó không bao giờ xuất hiện trong các tác vụ gần đây không? Hoặc chỉ biến mất khi hoàn thành? –

Trả lời

3

Chuẩn trả lời

lỗi cho tôi nếu người mang tin xấu, nhưng chức năng này không thể đạt được sử dụng phương pháp chuẩn mà không trọng cách mà các công trình ứng dụng của bạn. Thậm chí sau đó, nó sẽ chỉ hoạt động miễn là ứng dụng của bạn đang chạy. Hơn nữa, làm như vậy sẽ yêu cầu một thiết bị gốc với một ROM chuyên vì bạn không thể ghi đè lên các chức năng của nút Home trong anyway. Tất cả những gì bạn có thể làm là trả lời onNewIntent() mà không kích hoạt nếu bạn nhấn và giữ nút Home.

Tác vụ gần đây đặc biệt để người dùng dễ sử dụng để cho phép họ quay lại bất kỳ ứng dụng nào họ đang sử dụng, bất kể ứng dụng có đang chạy hay không. Tuy nhiên, có tin tốt. Quá trình này không giúp ứng dụng của bạn luôn hoạt động! Nó chỉ đơn giản là một biểu tượng trỏ đến gói của bạn.

Thật không may, điều này có nghĩa là nếu ứng dụng của bạn vẫn đang chạy, một cái gì đó khác đang diễn ra đang giữ cho nó chạy.

không chuẩn trả lời

Có thể bằng cách chỉnh sửa các thuộc tính gói trong thời gian chạy (nhiều trong cùng một cách mà bạn có thể bật/thành phần vô hiệu hóa từ mã java). Điều này là rất khuyến khích, bởi vì nhiệm vụ gần đây là một tính năng khả năng sử dụng của nền tảng cốt lõi Android. Điều này sẽ yêu cầu một số nghiên cứu.

0

Một chút trễ, nhưng điều này vẫn xuất hiện như là hit hàng đầu trên Google. Vui lòng xem câu hỏi this để có giải pháp khả thi.

Trong trường hợp của bạn, bạn sẽ phải:

  • Tạo Hoạt động mới C gọi ExitActivity, và thêm lá cờ biểu hiện như mô tả trong câu trả lời khác.
  • Hoạt động B nên có các thuộc tính sau trong biểu hiện: android:taskAffinity="com.example.ActivityB" android:allowTaskReparenting="true" android:launchMode="singleTask" android:documentLaunchMode="always"
  • Đặt thuộc tính nhiệm vụ ái lực trên C để được giống như B
  • Các cuộc gọi đến Intent.addFlags trong ExitActivity chỉ nên là người cuối cùng ba: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);