2010-03-19 44 views
8

Tôi muốn tạm dừng hoặc đặt ứng dụng trên nền khi nhấn nút quay lại, tôi không muốn ứng dụng đi qua phá hủy tiểu bang. Mọi thứ xảy ra khi tôi ghi đè onKeyDown và khi tôi buộc tạm dừng hoặc dừng ứng dụng bằng cách sử dụng onPause, tôi có một số vấn đề với sự cố ứng dụng và wakelock, nhưng khi tôi nhấn nút Home, tôi thực hiện phương thức onPause và không có ngoại lệ !!Android - Tránh một hoạt động để tiêu diệt, chỉ dừng lại hoặc tạm dừng nó khi nhấn nút quay lại

+2

Chỉ cần viết hoạt động của bạn để tiết kiệm đúng trạng thái của nó, sử dụng 'onSaveInstanceState() '. Không có hoạt động nào có thể tồn tại mãi mãi, vì Android phá hủy ngay cả các hoạt động bị tạm dừng để đòi lại RAM. – CommonsWare

+0

Tôi đang làm việc trên ứng dụng GPS được nhúng trên thiết bị xe hơi. Khi tai nạn xuất hiện, dịch vụ của tôi sẽ tiếp tục ứng dụng để hiển thị sự kiện tai nạn. Nếu người dùng nhấp vào nút quay lại, ứng dụng sẽ bị hủy và khi dịch vụ tiếp tục, phải mất một chút thời gian để tạo lại các hoạt động và sau đó sự kiện tai nạn xuất hiện. Nếu hệ thống cần phá hủy ứng dụng, tôi chắc chắn người dùng sẽ không bị làm phiền bởi việc giải trí nếu không ứng dụng đó không được tiêu hủy, đó là vấn đề an ninh! – Ghostwan

+1

"Tôi đang làm việc trên ứng dụng GPS được nhúng trên thiết bị xe hơi." Sau đó, bạn có quyền kiểm soát phần vững và có thể làm những việc ngoài SDK (và, thẳng thắn, ngoài khả năng chung của StackOverflow để trợ giúp). "Nếu người dùng nhấp vào nút quay lại, ứng dụng sẽ bị hủy và khi dịch vụ tiếp tục, sẽ mất một chút thời gian để tạo lại hoạt động và sau đó sự kiện tai nạn xuất hiện". Làm việc để tăng tốc hiệu suất của việc mở các hoạt động, sau đó. "ứng dụng không được tiêu hủy, đó là vấn đề an ninh!" Android có lẽ là sự lựa chọn sai của hệ điều hành cho ứng dụng của bạn. – CommonsWare

Trả lời

11

Câu trả lời là

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 

    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     moveTaskToBack(true); 
     return true; // return 
    } 

    return false; 
} 
+0

Trường hợp khác, cách thực hiện khi người dùng nhấp vào Hoạt động phụ trợ, Có vẻ như không gọi onKeyDown. – kangear

+0

okay, tôi thích giải pháp cho việc chạm bên ngoài Windows.http: //stackoverflow.com/a/5831214/2193455 – kangear

18

Cố gắng sử dụng phương pháp onBackPressed(), như thế này:

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 
+3

onBackPressed() hợp lệ kể từ API Cấp 5, vì vậy nếu bạn không hỗ trợ các thiết bị cũ hơn, câu trả lời này là tốt hơn. –

0
@Override 
public void onBackPressed() { 
    if(mWebView.canGoBack()) 
     mWebView.goBack(); 
    else 
     //super.onBackPressed(); 
     moveTaskToBack(true); 

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