2012-07-24 36 views
11

Khi ứng dụng của tôi không hoạt động, Android sẽ hủy quá trình này. Nếu người dùng mở lại ứng dụng sau một thời gian, chỉ có Hoạt động hàng đầu được tạo - đây là vấn đề đối với tôi vì hoạt động phụ thuộc vào việc khởi tạo các đối tượng khác (hiện đang bị hủy).Khởi động lại ứng dụng Android sau khi quá trình bị giết

Điều tôi muốn làm trong trường hợp đó là khởi chạy lại ứng dụng. Tôi có thể làm như thế nào?

+0

Android giết chết một App vào bộ nhớ giải phóng. Vì vậy, nếu ứng dụng không hoạt động, nó có khả năng bị giết sau một thời gian khi hệ điều hành cần bộ nhớ để thực thi các chương trình khác. – gkris

+0

Có thể bạn cần một dịch vụ trên nền để giữ _vital_ _objects_ chạy. Bạn có thể sử dụng 'Sticky Intent' để đảm bảo dịch vụ được khởi động lại khi nó bị giết. – DroidBender

Trả lời

0

Bạn có lẽ nên xem xét việc lưu trữ các Đối tượng như vậy trong việc triển khai ứng dụng của bạn trong lớp học Application.

Nếu các đối tượng này có trạng thái cần kiên trì hơn, bạn nên lưu trạng thái của các đối tượng đó trong phương thức onPause() của hoạt động, hoặc vào cơ sở dữ liệu, trong SharedPreferences hoặc từ xa.

+6

ngay cả khi bạn giữ chúng trong lớp 'Application', sau khi quá trình bị giết bởi' Android', các đối tượng sẽ bị mất, và bạn sẽ không bắt đầu với "hoạt động khởi tạo", nhưng với lần hiển thị cuối cùng. –

7

Chỉ cần xác định rằng Application của bạn đang được khởi chạy sau khi Android bị phá hủy trước đó, bạn có thể thực hiện việc này bằng cách giữ biến trong lớp Application tùy chỉnh và đặt thành true sau khi đơn đăng ký của bạn được khởi tạo. Vì vậy, khi applicaction được tái khởi động, lá cờ này là sai, và sau đó chỉ cần thực hiện một Intent để khởi động chính Activity bạn xác định FLAG_ACTIVITY_CLEAR_TOP:

Intent reLaunchMain=new Intent(this,MainActivity.class); 
reLaunchMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(reLaunchMain); 
+0

Tôi nên đặt mã này ở đâu? Nó bị treo nếu tôi làm điều đó trong onCreate hoạt động –

+0

bạn nhận được ngoại lệ nào? bạn nên gọi điều này khi bạn bây giờ ứng dụng của bạn được khởi chạy lại bởi Android. –

+0

@OvidiuLatcu hi, là đối tượng Ứng dụng được tạo lại khi hoạt động bạn đang truy cập (và được tạo lại) không phải là trình khởi chạy? Tôi đã yêu cầu này bởi vì tôi không thể treo lên trình gỡ rối vào thời điểm hoạt động được tái tạo. Tks –

0

Tôi nghĩ rằng câu trả lời này chỉ dành cho bạn.

Sau khi kết thúc cuộc gọi tiến bộ này

 finish(); 
     Intent intent = new Intent(this, sameactivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
Các vấn đề liên quan