2011-11-11 57 views

Trả lời

7

Tôi không nghĩ rằng có bất kỳ cách nào mà bất kỳ quá trình nền độc hại nào có thể nhận được dữ liệu gói của ứng dụng của bạn. không được ghi lại cách Android xử lý dữ liệu Bundle, có thể hoặc không được ghi vào đĩa trong trường hợp ứng dụng của bạn được làm sạch, trong khi được tạo nền. nếu nó là, cho rằng chúng tôi không có đầu mối ở đâu, và gần như certa inly không có quyền truy cập đọc vào phần đó của đĩa, tôi sẽ không lo lắng về một số quy trình của bên thứ ba có thể khôi phục dữ liệu đó.

Do đó, tôi không rõ bạn nghĩ gì về phơi nhiễm.Mặc dù tôi có thể thiếu một cái gì đó. Tuy nhiên, trong câu trả lời cho câu hỏi của bạn, nó hoàn toàn trong bộ nhớ trong khi ứng dụng của bạn còn sống và nếu ứng dụng của bạn được đặt nền, có thể hoặc không được viết ở đâu đó, nhưng chúng tôi không biết vì Google chưa nói với chúng tôi.

Nó bị hủy cùng với ứng dụng khi bộ nhớ được thu thập.

+0

Cảm ơn đó là chính xác những gì tôi muốn biết – Jleuleu

+2

Đây là một câu trả lời không chính xác. Xem xét trường hợp quá trình ứng dụng được tự động giết bởi hệ điều hành (trong khi ứng dụng ở chế độ nền) và sau đó người dùng quay trở lại ứng dụng, sau đó hệ điều hành khôi phục ứng dụng (tạo một quy trình mới và khôi phục chồng hoạt động). Mặc dù quy trình ứng dụng không có trong một thời gian, gói được cung cấp cho một hoạt động đã được khôi phục, vì vậy nó đã được lưu trữ trong một hệ thống nào đó. Trong lượt của nó, hệ thống chỉ không xác định chính xác nó lưu trữ bó như thế nào, vì vậy theo lý thuyết nó có thể sử dụng hệ thống tập tin. –

+1

Bạn cũng có thể kiểm tra câu trả lời liên quan từ CommonsWare: http://stackoverflow.com/a/12468776/247013 –

1

Dự đoán của tôi sẽ có trong bộ nhớ, nhưng cách tốt nhất để bảo vệ dữ liệu của bạn sẽ không tin tưởng vào hệ thống và mã hóa nó. Không bao giờ tin tưởng máy khách (trong trường hợp này máy khách là hệ điều hành).

EDIT:

Để được rõ ràng, tôi không nói rằng mã hóa các gói. Thay vào đó tôi nói rằng bất kỳ dữ liệu nhạy cảm nào không được đưa vào gói. Nếu bạn phải đặt dữ liệu tùy chỉnh trong nhóm, sau đó mã hóa dữ liệu đó.

Nhưng cuối cùng bạn nên giữ ít dữ liệu nhạy cảm nhất trên máy khách nhất có thể. Đây là lý do tương tự một trang web thương mại điện tử sẽ chỉ hiển thị 4 chữ số cuối cùng của thẻ tín dụng.

+0

Android sử dụng 'onSaveInstanceState' /' onRestoreInstanceState' để duy trì trạng thái giao diện người dùng của mỗi chế độ xem khi hệ thống giết hoạt động có thể cần được khôi phục trong tương lai (ví dụ: xoay màn hình hoặc bộ nhớ thấp). Nếu bạn thực sự muốn mã hóa thông tin đó (bạn không), bạn sẽ cần lưu và khôi phục tất cả thông tin trạng thái cho tất cả các chế độ xem. Tôi có thể nghĩ không có ứng dụng nào có tên của trường văn bản có tiêu điểm là thứ bạn cần mã hóa ... – user113215

+0

Tôi không nói mã hóa gói. Thay vào đó tôi nói rằng bất kỳ dữ liệu nhạy cảm nào không được đưa vào gói. Nếu bạn phải đặt dữ liệu tùy chỉnh trong nhóm, hãy mã hóa dữ liệu đó. – pjco

8

Để lưu trữ dữ liệu duy nhất cho các ứng dụng đời (tức là tạm thời), sử dụng các sự kiện onSaveInstanceState (Bundle) hoạt động

Những thông tin này sẽ chỉ được giữ trong bộ nhớ cho đến khi ứng dụng được đóng, dữ liệu sẽ được có sẵn bất kỳ lúc nào hoạt động này bắt đầu trong vòng đời hiện tại của ứng dụng.

Giải thích: nếu dữ liệu được lưu trữ tại đây theo hoạt động A sau đó ứng dụng hiển thị hoạt động khác hoặc xoay màn hình (do đó đóng A) và sau đó quay lại A có thể truy xuất dữ liệu để điền điều khiển. Tuy nhiên nếu ứng dụng được đóng lại và mở lại, dữ liệu sẽ biến mất và các điều khiển sẽ hoàn nguyên về giá trị mặc định của chúng.

Ví dụ về sử dụng: Lưu trữ văn bản gõ vào bởi người sử dụng và lựa chọn việc tạo ra một trật tự, blog entry, tin nhắn, vv ...

Lưu ý:

Điều quan trọng là bạn phải nhận thấy rằng chỉ có Hoạt động bị phá hủy và tái tạo, không phải toàn bộ ứng dụng của bạn! Ứng dụng Android có thể bao gồm nhiều Hoạt động, Dịch vụ và Trình cung cấp nội dung! Nếu ứng dụng bị đóng (ví dụ bằng cách nhấn nút “Quay lại”, thì tất cả các giá trị sẽ biến mất. SavedInstaceState chỉ có ở đó để bảo toàn dữ liệu tạm thời khi một Hoạt động bị hủy/tái tạo, chứ không phải bản thân ứng dụng. Muốn giữ lại dữ liệu vĩnh viễn, bạn cần phải lưu dữ liệu đó dưới dạng Tùy chọn hoặc trong một ContentProvider/cơ sở dữ liệu

+0

Cảm ơn, tôi chỉ muốn biết rằng dữ liệu được lưu trữ trong bộ nhớ. – Jleuleu

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