2013-06-06 29 views
5

Tôi gọi số finish() nếu đáp ứng một số điều kiện nhất định. Tuy nhiên, ngay cả sau khi finish() nếu tôi giữ nút home tôi vẫn có thể thấy ứng dụng của tôi ở đó. Nếu giết chết quá trình này không phải là một lựa chọn mong muốn, tôi phải làm gì?lý do ứng dụng của tôi vẫn hiển thị trong trình quản lý tác vụ sau khi hoàn thành

Đây là nơi tôi đang kêu gọi finish():

protected void onStart() { 
............. 
if(today.equals("...")) 
finish(); 

    }; 

Tôi biết rằng kết thúc sẽ kết thúc hoạt động nhưng tại sao nó vẫn có thể nhìn thấy trong công việc quản lý? Tôi đã hoàn thành nó.

+0

'kết thúc()' chỉ giết hoạt động chứ không phải toàn bộ ứng dụng. Bạn đang cố làm gì vậy? Tại sao bạn cần nó để biến mất? – dmon

+0

nhưng ứng dụng của tôi chỉ có một Hoạt động. Chỉ Main.java. – ARMAGEDDON

+0

Vâng, nhưng có một quy trình chứa bất kỳ hoạt động nào bạn có, ngay cả khi bạn chỉ có một hoạt động và đó là một hoạt động vẫn đang chạy. – dmon

Trả lời

9

Nhấn và giữ nút HOME không mở trình quản lý tác vụ. Đây là một số loại phần "Ứng dụng gần đây" hiển thị cho bạn các ứng dụng đã mở gần đây. Trên thực tế nó thông minh hơn một chút - nó có thể khôi phục hoạt động được truy cập lần cuối, nhưng vì bạn chỉ có một hoạt động, điều này không thực sự quan trọng đối với bạn

Vì vậy, về cơ bản ngay cả khi bạn có thể thấy ứng dụng của mình trong danh sách này, nó không có nghĩa là nó thực sự đang chạy.

+0

Câu trả lời đúng và chính xác nhất là câu trả lời ít nhất (cho đến bây giờ ít nhất)! Bạn đã có cuộc bỏ phiếu của tôi! – thiagolr

+0

Sau khi tìm kiếm các cách khác nhau để thoát khỏi một ứng dụng 'onDestroy()' hoặc 'finish()' hoặc 'android.os.Process.killProcess (android.os.Process.myPid()); super.onDestroy(); 'in' onDestroy() '... Tất cả đều dẫn đến hành vi này. Tôi vui mừng khi thấy rằng hoạt động không có trong ngăn xếp và chỉ ẩn trong danh sách các ứng dụng gần đây. Cảm ơn bạn! +1 – tricknology

+0

Trong khi đúng là gần đây không phải là người quản lý tác vụ, điều này bỏ lỡ điểm chính được thực hiện bởi Srikant, đó là kết thúc() không phải do thiết kế dự định sẽ dẫn đến chấm dứt quá trình. –

5

kết thúc() cho hệ thống Android biết rằng bạn đã hoàn tất. Đó là vào hệ thống Android để quyết định khi nào thực sự giết ứng dụng của bạn. Nó sẽ giữ cho ứng dụng của bạn xung quanh miễn là hệ điều hành không yêu cầu tài nguyên. Đối với hệ điều hành, việc giữ cho ứng dụng của bạn trong RAM rẻ hơn việc khởi động lại ứng dụng. Chiến lược này là đúng cho hầu hết các hệ điều hành hiện đại.

+0

Tôi nghĩ rằng tôi có được ý tưởng. – ARMAGEDDON

+0

Cũng như @Pavel Dudka đã đề cập, nhấn và giữ nút home không mở trình quản lý tác vụ, nhưng chỉ cần mở danh sách các ứng dụng được khởi chạy gần đây (ít nhất là trên điện thoại tôi đã xem). –

5

Nếu giết quá trình này không phải là một lựa chọn mong muốn, tôi nên làm gì?

Không có gì, rất có thể.

Tôi biết rằng kết thúc sẽ kết thúc hoạt động nhưng tại sao nó vẫn hiển thị trong trình quản lý tác vụ?

Trước tiên, quy trình của bạn vẫn đang chạy. Đây là một tối ưu hóa, vì vậy nếu người dùng chọn quay lại ứng dụng của bạn ngay lập tức hoặc điều gì đó khác kích hoạt mã ứng dụng của bạn (ví dụ: AlarmManager), Android không phải lãng phí CPU và pin. Android sẽ chấm dứt quá trình của bạn khi nó cho rằng điều này là phù hợp.

Lưu ý rằng tùy thuộc vào những gì bạn xem là "trình quản lý tác vụ", ứng dụng của bạn có thể xuất hiện ở đó, ngay cả khi quá trình của bạn bị chấm dứt. Ví dụ, nhấn và giữ HOME hoặc nhấn nút RECENTS sẽ trả về "các tác vụ gần đây", bao gồm các tác vụ mà quá trình đã bị chấm dứt.

nó giống như không thực sự chuyên nghiệp cho thấy thanh tiến trình trong ứng dụng trong công việc quản lý ứng dụng

Tôi không có ý tưởng tại sao bạn sẽ nghĩ rằng. Điều đó đang được nói, bạn được hoan nghênh override onCreateThumbnail() in your activities để trả lại nội dung khác để sử dụng cho hình thu nhỏ.

1

Processes ở lại S bang uspended:

PID USER  VSZ STAT COMMAND 
--- ----  --- ---- ------- 
5846 root   0 SW< [ksdioirqd/mmc1] 
5853 u0_a76 306m S {android.youtube} com.google.android.youtube 
5897 root  1852 S /sbin/sh - 
5922 u0_a79 286m S {om.me.mygdxgame} com.me.mygdxgame 
5947 u0_a49 278m S {roid.dspmanager} com.bel.android.dspmanager 
5965 root  1844 R ps -w 

Ngay cả khi tất cả các hoạt động đều đóng cửa.

Không có hại trong việc giữ nội dung được tải trong RAM khi có nhiều không gian. Chip RAM dễ bay hơi tiêu thụ điện năng, trống hoặc đầy.Quá trình bị treo không hog CPU. Các quy trình này sẽ bị chấm dứt khi cần thiết. Cho đến lúc đó, chúng phục vụ để nhanh chóng tiếp tục và làm cho hệ điều hành nhanh hơn.

Các tình huống khi bạn sẽ cần phải tìm kiếm tiến trình đang chạy là:

  1. kém quản lý chạy đi chủ đề. Bạn bắt đầu một thread chạy một vòng lặp, không biết nó sẽ bao giờ kết thúc, và trên đầu lỏng tất cả các tài liệu tham khảo cho nó.
  2. Thực hiện không tốt và thường xuyên, bị rò rỉ Dịch vụ. Đăng ký dịch vụ với người quản lý/dịch vụ hệ thống và quên hủy đăng ký.
  3. Quy trình hệ thống chạy qua Runtime.exec() và quên gọi destroy() trên chúng.

Nếu bạn chỉ đang xử lý các thành phần Android đơn giản và đã triển khai đúng vòng đời của chúng. Bạn không bao giờ cần phải lo lắng về các quy trình nội bộ.

5

finishAndRemoveTask() là API mới theo tài liệu "Hoàn thành tất cả các hoạt động trong tác vụ này và xóa nó khỏi danh sách nhiệm vụ gần đây".

if(android.os.Build.VERSION.SDK_INT >= 21) 
{ 
    finishAndRemoveTask(); 
} 
else 
{ 
    finish(); 
} 
Các vấn đề liên quan