2015-02-18 23 views
6

Tôi có hai hoạt động và tôi muốn chuyển đổi giữa chúng mà không cần tạo lại hoặc sao chép chúng. Mỗi hoạt động có một nút sẽ gửi người dùng đến người khác bằng ý định với FLAG_ACTIVITY_REORDER_TO_TOP.FLAG_ACTIVITY_REORDER_TO_TOP khiến RuntimeException hoặc màn hình đen xoay vòng

này hoạt động tuyệt vời trừ các điều kiện sau đây:

  1. bắt đầu ứng dụng tươi sau khi một lực lượng gần
  2. nhấn nút để đi vào hoạt động 2
  3. nhấn nút quay trở lại hoạt động 1
  4. xoay màn hình.

Tại thời điểm này, ứng dụng gặp sự cố với "Thực hiện ngừng hoạt động chưa được tiếp tục". Lollipop chỉ cho thấy một màn hình màu đen.

Thật kỳ lạ, nếu bạn chuyển đến màn hình chính trước bước 4 và tiếp tục ứng dụng và sau đó xoay điều kiện trên không có bất kỳ sự cố nào và ứng dụng hoạt động tốt cho đến khi đóng/khởi động lại.

Tình trạng này dường như cụ thể đối với FLAG_ACTIVITY_REORDER_TO_TOP và xảy ra trên Android 5.0 và 4.4 và chỉ khi khởi động mới.

Tôi không có thuộc tính nào về các hoạt động trong tệp kê khai. Bố cục chỉ có một nút gọi phương thức như sau:

MainActivity: 
public void goSecond(View v) { 
     Intent i = new Intent(this, SecondActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     startActivity(i); 
} 

SecondActivity: 
    public void goFirst(View v) { 
     Intent i = new Intent(this, MainActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     startActivity(i); 
    } 

Tôi không ghi đè bất kỳ phương pháp vòng đời nào khác hoặc làm bất kỳ thứ gì khác.

Bất kỳ ý tưởng nào?

Trả lời

0

Trường hợp thú vị, nếu bạn gỡ lỗi các phương pháp vòng đời bạn có thể thấy, khi bạn xoay màn hình, onStop đang được gọi, không có trước đây. Vụ tai nạn sau đó đăng nhập

java.lang.RuntimeException: Performing pause of activity that is not resumed: MainActivity 

Tiếp theo

java.lang.RuntimeException: Performing stop of activity that is not resumed: MainActivity 

Tôi cho rằng đó là một lỗi trong khuôn khổ. Điều thú vị là điều này dường như chỉ xảy ra với cờ FLAG_ACTIVITY_REORDER_TO_FRONT.

Theo văn bản tôi chỉ tìm thấy bài viết này, trong đó cho thấy rõ ràng rằng có vẻ là một thiếu sót rất lớn với cờ này: Is any alternate of Intent.FLAG_ACTIVITY_REORDER_TO_FRONT (chú ý Vé Bug Android nêu)


Cách giải quyết: Nếu bạn đang dependend trên hành vi FLAG_ACTIVITY_REORDER_TO_FRONT mang đến cho bạn, và bạn muốn bắt chước nó (loại), bạn có thể sử dụng

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

thay vì (tuy nhiên, nó hoạt động sl ightly khác nhau - nó xóa ngăn xếp trên đầu trang của hoạt động được gọi là, thay vì sắp xếp lại nó, vì vậy bạn sẽ có ít nhất 1 tái tạo hoạt động).

Tùy chọn khác là phát xung quanh với thuộc tính launchMode trong định nghĩa của hoạt động trong tệp kê khai.launchMode="singleInstance" có thể là những gì bạn đang sau (tuy nhiên điều này lộn xộn với ngăn xếp nhiệm vụ của bạn, vì vậy hãy cẩn thận)

Sau khi tất cả, nếu thiết kế của bạn cho phép, hãy xem xét các mảnh để tránh những vấn đề đó hoàn toàn.

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