10

Tôi đang gửi một mục đích để các máy ảnh từ một hoạt động mà tôi gọi là như thế này:Ngăn chặn hoạt động không bị phá hủy

Intent testphoto = new Intent(Dashboard.this,CameraHandler.class); 
startActivity(testphoto); 

Trong lớp CameraHandler tôi gọi là máy ảnh:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 0); 

Nhưng trước khi onActivityResult được gọi trong lớp camerahandler, hoạt động này bị hủy. Có cách nào để ngăn chặn điều này?

TÌM KIẾM TRẢ LỜI: Tôi đã có trong androidmanifest nohistory = true và điều đó khiến HĐH hủy hoạt động trước kết quả.

+0

làm thế nào để bạn biết nhận nó bị phá hủy? – dymmeh

+0

Tôi đã đăng nhập vào phương thức OnDestroy(), tôi đã thử một ứng dụng chỉ với một hoạt động và hoạt động tốt, nhưng khi tôi bắt đầu sử dụng ứng dụng này trong một ứng dụng phức tạp hơn, hoạt động bị hủy trước khi máy ảnh trả lại hình ảnh – Diego

+0

Nếu bạn đã tìm thấy câu trả lời của riêng mình, hãy đăng câu trả lời và chấp nhận câu trả lời của riêng bạn để đóng câu hỏi. Cảm ơn bạn. – davidcesarino

Trả lời

3

Bạn không phải lo lắng về việc gọi Activity bị hủy khi bạn gọi startActivityForResult(), vì nó sẽ không thay đổi hành vi mong đợi (nghĩa là hoạt động của trẻ sẽ nhớ chuyển kết quả lại cho cha mẹ cho dù cha mẹ bị phá hủy hay không). Xem trang này post. Cũng cần lưu ý rằng đôi khi cần thiết để ngăn không cho Activity s bị hủy (tức là thay đổi cấu hình, vv), nói chung bạn chỉ muốn rời khỏi vòng đời Activity và để hệ thống quản lý nền Activity giây cho bạn. Khi bạn khởi chạy Activity mới, bạn không nên ngăn chặn rõ ràng các trang trước Activity s bị hủy.

+2

Chỉ có điều là đột nhiên onActivityResult không bao giờ được gọi, khi tôi có một ứng dụng chỉ với một hoạt động, hoạt động không bao giờ bị hủy, nhưng onActivityResult được gọi, bây giờ khi bên trong ứng dụng khác đột nhiên hoạt động bị hủy và kết quả dường như không bao giờ trở lại . Bất kỳ ý tưởng làm thế nào mà có thể được? – Diego

+0

Có lẽ đã xảy ra sự cố với quy trình làm việc của bạn. Có vẻ kỳ lạ là bạn đang gọi 'startActivityForResult()' hai lần. Bạn chắc chắn cần phải gọi 'startActivityForResult()' khi khởi chạy ứng dụng máy ảnh thực sự, nhưng tôi không chắc chắn rằng bạn cần nó cho lớp 'CameraHandler'. Lớp 'CameraHandler' là gì? Có thể khởi chạy ứng dụng máy ảnh trực tiếp từ trang tổng quan không? –

+0

Tôi cần một màn hình ở giữa, vì vậy trực tiếp từ bảng điều khiển không phải là một lựa chọn, tôi thấy rằng startActivityForResult sẽ ngăn chặn phá hủy các hoạt động, nhưng nó không, vì vậy thực sự tôi cũng có thể loại bỏ điều đó. Camerahandler gửi ý định đến máy ảnh và tải lên một kết quả không hoạt động ảnh mà hiện tại nó không làm .. – Diego

29

Đảm bảo bạn không bật cài đặt Nhà phát triển "Không lưu giữ hoạt động" vì nó sẽ hủy hoạt động bạn đang rời khỏi.

+0

QA đã báo cáo sự cố - Tôi chỉ có thể tạo lại sự cố trên điện thoại họ sử dụng. Tôi không thể tìm ra lý do tại sao các ket hoạt động thoát! Không biết về cài đặt này cho đến khi tôi thấy nhận xét của bạn. Cảm ơn :) – ajh158

+0

chỉ trên máy tính bảng của tôi .. vấn đề ... cảm ơn nụ +1 –

+3

+100. Tại sao đây lại là một lựa chọn? Nó có nhiều tác dụng phụ! –

-1

Bạn cần phải đề cập đến trong của bạn biểu hiện như

android:persistent="true" 

Dưới SO bài trả lời cùng một câu hỏi

How to make an activity stop, rather then be destroyed, from the BACK key?

How to prevent call of onDestroy() after onPause()?

Prevent activity from being destroyed as long as possible

+0

Thuộc tính này không tồn tại cho các hoạt động: https://developer.android.com/guide/topics/manifest/activity-element.html – jekatt

+0

@jekatt nó không tồn tại https: // nhà phát triển .android.com/guide/topics/manifest/application-element.html –