2012-07-05 22 views
7

Tôi có một hoạt động gọi là HomeActivity có SurfaceView và hiển thị ảnh xem trước của máy ảnh. Hoạt động này rất nặng và cảm thấy chậm nếu bạn bắt đầu/khởi động lại nó.onCreate luôn được gọi nếu điều hướng trở lại với mục đích

Vì vậy, tôi đã thực hiện một số điều tra và phát hiện ra, bằng cách nào đó phương thức onCreate luôn được gọi. Theo tôi, điều này không nên xảy ra nếu Hoạt động đã được bắt đầu?

documentation nói: Được gọi khi hoạt động được tạo lần đầu tiên. Đây là nơi bạn nên làm tất cả các thiết lập tĩnh bình thường của bạn: tạo các khung nhìn, liên kết dữ liệu với các danh sách, vv. Phương thức này cũng cung cấp cho bạn một Gói chứa trạng thái được đông lạnh trước đó của hoạt động, nếu có. Luôn theo sau bởi onStart().

Dưới đây là phương pháp, xử lý sẽ trở lại:

protected void gotoHome() { 
    final Intent intent = new Intent(SomeOtherActivity.this, HomeActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
} 

Edit:

Dưới đây là làm thế nào tôi rời khỏi HomeActivity ... không có gì đặc biệt:

final Intent i = new Intent(HomeActivity.this, SomeOtherActivity.class); 
startActivity(i); 
+0

Đảm bảo bạn không hoàn thành() HomeHoạt động khi bắt đầu Hoạt động khác từ nó. – Egor

+0

onCreat() gọi khi bạn đang quay trở lại với phương thức 'gotoHome()'? –

+0

@Egor Tôi không gọi kết thúc() – Mark

Trả lời

14

Vâng, khi bạn muốn quay lại HomeActivity, bạn cần sử dụng các cờ này:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 

Dưới đây là phần có liên quan từ các tài liệu trên Intent.FLAG_ACTIVITY_CLEAR_TOP:

hiện đang chạy trường hợp hoạt động B trong ví dụ trên hoặc nhận mục đích mới, bạn đang bắt đầu ở đây trong onNewIntent của nó (phương pháp sẽ) hoặc tự hoàn thành và khởi động lại với mục đích mới. Nếu nó đã tuyên bố chế độ khởi chạy của nó là "nhiều" (mặc định là ) và bạn chưa đặt FLAG_ACTIVITY_SINGLE_TOP trong cùng một mục đích , thì nó sẽ được hoàn thành và được tạo lại; cho tất cả các chế độ khởi chạy khác hoặc nếu FLAG_ACTIVITY_SINGLE_TOP được đặt thì Intent này sẽ là được gửi đến onNewIntent() của cá thể hiện tại.

+0

Cảm ơn bạn rất nhiều! Facepalm ... có thể tự mình có ý tưởng này! – Mark

+0

Thỉnh thoảng nó làm tôi ngạc nhiên về việc bạn có thể nhận được câu trả lời hữu ích ở đây nhanh như thế nào ;-) Rất vui được giúp đỡ. –

+0

Xin chào David, Hoạt động khởi phát của tôi được gọi mỗi khi tôi trở lại từ hoạt động của con mình, bạn có thể giúp tôi không? –

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