2011-02-07 45 views
41

Tôi đang gọi số finish() nhưng hoạt động của tôi vẫn tiếp tục.Kết thúc cuộc gọi() trên một hoạt động Android không thực sự hoàn thành

Tôi có một hoạt động được gọi bởi trình đơn từ màn hình hoạt động chính. Trong phương pháp hoạt động của tôi onCreate() Tôi có đoạn mã sau:

// Make sure there are some events in the list. 
    if (theEventArrayList.isEmpty()){ 
     Toast.makeText(this, "Event List is empty", Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
    SummarizeCurrentEvent(); 
    graphEvents(); 

Nếu danh sách rỗng nó đặt lên Toast, và tôi có thể đặt breakpoint trên cuộc gọi đến finish(). Nếu tôi bước từ đó trong trình gỡ lỗi nó đi thẳng đến SummarizeCurrentEvent(). Tôi nghĩ rằng finish() sẽ thoát khỏi hoạt động. đây không phải là trường hợp? Tôi có thể tìm thêm thông tin về phương pháp này ở đâu?

Trả lời

65

Bạn nên đặt một tuyên bố return sau đó finish, vì phương thức được gọi là finish sẽ được thực thi hoàn toàn nếu không.

cũng có, xem câu hỏi này: about finish() in android

+1

Sẽ tốt hơn nếu đặt 'SummarizeCurrentEvent(); graphEvents(); ... 'trong một khối' else {} 'khác? –

+0

@ ban-geoengineering Bạn có khả năng có thể có nhiều '' if (...) {finish(); trở về; } ''. Tôi nghĩ rằng đó là một thói quen tốt để rõ ràng '' kết thúc() '' ** và ** '' return'' khi có mã sau. –

0

Hoàn tất hoạt động, nhưng đến vòng lặp chính để thực hiện bất kỳ tương tác UI nào. Bạn phải đợi cho đến khi vòng lặp UI chạy, sau khi bạn quay trở lại từ onCreate.

5

kết thúc() chỉ nói với các hoạt động để làm những gì nó cần phải làm gì để hoàn thành, ví dụ. tắt máy, gọi on onPause, báo cáo kết quả cho phụ huynh, vv Nó không thực hiện lệnh gọi exit() hoặc bất cứ thứ gì.

Bạn nên quay lại sau cuộc gọi kết thúc().

3

Thêm vào câu trả lời khác, bạn vẫn có thể (Re)onStart, onResume và gọi.

Tôi nói điều này bởi vì trong liên kết sau, có một bảng cho biết rằng một hoạt động bị giết, trước tiên nó được gọi onPause (và có thể nhưng không được bảo đảm) trên Stop và onDestroy.

Reference Activity

0

Đây là trường hợp báo cáo kết quả try...catch nên được sử dụng.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    try { 
     //...some initialization... 

     // Make sure there are some events in the list. 
     if (theEventArrayList.isEmpty()){ 
      throw new Exception("Event List is empty"); 
     } 
     SummarizeCurrentEvent(); 
     graphEvents(); 
    } catch (Exception e) { 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
} 
Các vấn đề liên quan