2016-09-12 16 views
5

Tôi nhận thấy một hành vi đáng ngạc nhiên khi xóa ứng dụng khỏi trình chuyển đổi ứng dụng bằng cách vuốt. Ứng dụng này có một dịch vụ. Khi ứng dụng bị "giết", mọi chủ đề bắt đầu từ dịch vụ tiếp tục chạy, các chủ đề khác sẽ bị chấm dứt.Điều gì chính xác xảy ra khi bạn xóa một nhiệm vụ khỏi các lần gần đây?

Điều thực sự đáng ngạc nhiên là hệ thống có thể xác định chủ đề đã bắt đầu từ dịch vụ, thậm chí nếu tôi cố gắng xáo trộn nguồn gốc của chủ đề như thế này:

  • Trong onCreate của dịch vụ() phương pháp, viết Runnable đến trình xử lý chủ đề chính.
  • Runnable bắt đầu một chuỗi mới tồn tại loại bỏ khỏi những lần gần đây.

Nếu tôi đăng chính xác cùng một trình điều khiển cho cùng một trình xử lý nhưng từ một hoạt động, luồng không tồn tại. Làm sao hệ thống có thể biết được? Liệu nó bằng cách nào đó theo dõi thread nào là runnable được đăng từ?

Edit: Theo yêu cầu, các phương thức onCreate() phương pháp:

@Override 
public void onCreate() { 
    super.onCreate(); 

    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      new Thread(){ 
       @Override 
       public void run() { 
        while (true) { 
         System.out.println("hello from thread"); 
         try { 
          Thread.sleep(1000); 
         } catch (InterruptedException e1) { 
          e1.printStackTrace(); 
         } 
        } 
       } 
      }.start(); 
     } 
    }, 1000); 
} 
+0

Trên thực tế 'Service' trong chạy android trên' UI Thread' (trừ khi bạn sử dụng 'IntentService') –

+0

và Trình xử lý Android chứa 'ThreadLocal' để kiểm tra Giao diện người dùng. –

+0

Vui lòng đăng mã của bạn cho onCreate() nếu có thể. –

Trả lời

2

Cuối cùng phát hiện ra điều gì xảy ra. Hệ thống không chọn lọc giết các luồng không phục vụ, nó sẽ giết toàn bộ ứng dụng và sau đó khởi động lại dịch vụ, vì vậy dường như các luồng của dịch vụ không bị ảnh hưởng.

+0

vì vậy nếu bạn có quá trình chạy (ví dụ: sao chép tệp), bạn sẽ mất tệp đó? –

+0

@MoshErsan Tôi nghĩ rằng tệp sẽ tồn tại nhưng nó sẽ không đầy đủ. – fhucho

+0

rằng những gì tôi có nghĩa là, do đó, thanh toán bù trừ ứng dụng từ gần đây sẽ làm hỏng quá trình của bạn –

1

Chỉ muốn ném một số ánh sáng về điều này.

Thành phần Android không biết gì về chủ đề mà chúng không tạo. Vì vậy, trong khi IntentService sẽ xử lý chuỗi được tạo cho việc sử dụng onHandleIntent(), một Dịch vụ thông thường sẽ không chú ý đến bất kỳ chủ đề nào bạn tự ngã ba.

Sau khi dịch vụ bị hủy, bất kỳ luồng nào nó bị rò rỉ sẽ tiếp tục chạy, cho đến khi Android chấm dứt quá trình.

Nếu chủ đề của bạn đang dừng lại bất ngờ, mà không có gì để làm với Dịch vụ - một lần nữa, Dịch vụ biết gì về chủ đề mà bạn ngã ba mình.

+0

Tôi nhận thức được điều này tất nhiên, đó là lý do tại sao các hành vi rất khó hiểu. – fhucho

0

Từ tài liệu tham khảo,

nó sẽ thoát ứng dụng theo cách tương tự nhấn lặp đi lặp lại. Đôi khi, điều đó cũng giết chết các quy trình nền của nó, nhưng đôi khi nó không:

Xóa một mục nhập trong các tác vụ gần đây sẽ giết bất kỳ quá trình nền nào tồn tại trong tiến trình. Nó sẽ không trực tiếp làm cho các dịch vụ dừng lại, tuy nhiên có một API cho họ để tìm ra nhiệm vụ đã được gỡ bỏ để quyết định xem họ có muốn điều này có nghĩa là họ nên dừng lại. Điều này là để loại bỏ, nói rằng, nhiệm vụ gần đây của một ứng dụng e-mail sẽ không làm cho nó ngừng kiểm tra e-mail.

Nếu bạn thực sự muốn dừng hoàn toàn ứng dụng, bạn có thể nhấn và giữ các tác vụ gần đây để chuyển đến thông tin ứng dụng và nhấn lực dừng ở đó. Buộc dừng là hoàn toàn giết chết ứng dụng — tất cả các quá trình đều bị giết, tất cả các dịch vụ đã dừng, tất cả các thông báo đã bị xóa, tất cả báo thức đã bị xóa, v.v. Ứng dụng không được phép khởi chạy lại cho đến khi được yêu cầu một cách rõ ràng.

Về cơ bản, ứng dụng sẽ quyết định và phụ thuộc vào cách ứng dụng được mã hóa.Bạn nên xem màn hình trong Cài đặt> Ứng dụng> Chạy để xem mỗi ứng dụng hoạt động như thế nào

Vui lòng kiểm tra liên kết refrence bên dưới để biết thêm thông tin.

refrence Liên kết: -

http://lifehacker.com/what-happens-when-you-remove-an-app-from-androids-mult-1179868228

http://www.howtogeek.com/169549/what-exactly-happens-when-you-swipe-an-android-app-from-the-recent-apps-list/

https://plus.google.com/+DianneHackborn/posts/GfwRYCC42uX

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