2016-02-20 20 views
7

Tôi đã bắt gặp 2 loại khác nhau để hoạt động của tôi chạy dựa trên một số thông số. Người đầu tiên là savedInstanceState và thứ hai là getIntent.getExtras()savedInstanceState vs getIntent(). GetExtras()

Q1) Vì vậy, những gì tôi không hiểu là, một khi tôi vượt qua để hoạt động của tôi và sau đó bắt đầu nó, nó nên có gói. Nhưng, nếu vì một lý do nào đó hoạt động được tái tạo lại, nó sẽ có cùng một gói lại. (Tôi có quyền không?)

Q2) Dựa trên thực tế Q1 là đúng và thực tế là tôi không thể ghi đè lên gói khi hoạt động đã bắt đầu, tôi đoán rằng nếu vì lý do nào đó của tôi đã bắt đầu Hoạt động, tôi muốn thay đổi một số thông số của gói, tôi nên tạo một số trường hoạt động và sử dụng các trường đó trong cuộc sống hoạt động của mình. Và ghi đè saveInstanseState để lưu các trường mới nếu từ một số lý do hoạt động của tôi sẽ được tạo lại. nó có đúng không

Q3) Căn cứ vào thực tế là tất cả ở trên là đúng sự thật, trong onCreate() mọi hoạt động trong thế giới của Android nên cần phải bắt đầu như thế này:

if (savedInstanceState != null) { 
    mType = savedInstanceState.getInt("some_val1"); 
    mCardId = savedInstanceState.getLong("some_val2"); 
    mQuery = savedInstanceState.getString("some_val3"); 
    mCategory = savedInstanceState.getLong("some_val4");; 
} else { 
    mType = getIntent().getExtras().getInt("some_val1"); 
    mCardId = getIntent().getExtras().getLong("some_val2"); 
    mQuery = getIntent().getExtras().getString("some_val3"); 
    mCategory = getIntent().getExtras().getString("some_val4"); 
} 

Q4) Giả onSaveInstanceState được gọi và lưu các giá trị khác với gói ban đầu đã bắt đầu hoạt động (getIntent.getExtras), Nếu hoạt động được tái tạo lại, điều này có nghĩa là saveInstanceState khác với getIntent.getExtras() hoặc chúng bây giờ giống nhau không? (Nếu chúng giống nhau, thì if/else trên đoạn mã trên không có ý nghĩa thực sự, vì nó giống nhau!).

Q5) Nếu tôi không ghi đè lên onSaveInstanceState nhưng khi tôi tạo ra hoạt động này tôi vượt qua nó một Bundle, hiện nay vẫn còn có nghĩa là tôi có thể nhận được gói ban đầu của tôi nếu hoạt động tái tạo một lần nữa? (tôi đoán câu hỏi này sẽ tự trả lời dựa trên các câu trả lời khác)

Trả lời

6

Sự khác biệt chính giữa getIntent().getExtras()savedInstanceState là chúng có cách sử dụng khác nhau. Mục đích là để liên lạc giữa các hoạt động trong khi trạng thái đã lưu là trạng thái hiện tại của giao diện người dùng của bạn khi bạn rời khỏi hoạt động của mình, ví dụ: bằng cách nhấn nút trang chủ. Vì vậy, nó sẽ được lưu vị trí của ListView s của bạn và tương tự hoặc giá trị của chưa lưu TextEdit s.

Q1: Có nói chung rằng thông tin không bị mất, miễn là bạn không mở hoạt động lần thứ hai.

Q2: Đúng cho đến nay. Chế độ xem mặc định sẽ lưu trạng thái của chúng, do đó bạn không cần tự làm. Tuy nhiên, nếu Hoạt động của bạn được bắt đầu lần thứ hai với một gói khác, bạn sẽ có các giá trị mới.

Q3: Không cần thiết, điều đó phụ thuộc vào trường hợp sử dụng của bạn, tuy nhiên điều đó sẽ không làm hỏng bất cứ điều gì. Vấn đề là khi bạn tải ngày từ internet, bạn sẽ phải đợi một lần, vào lần gọi thứ hai onCreate() dữ liệu sẽ được khôi phục (nếu bạn hiển thị chúng trong các phần tử giao diện người dùng có id!).

Q4: Mục đích sẽ là giá trị ban đầu trong khi trạng thái đã lưu là trạng thái sửa đổi của các giá trị.

Q5: Nói chung sẽ hoạt động tương tự. Vì các phần tử ui cơ bản sẽ lưu trạng thái của chúng theo mặc định.

Điểm của trạng thái đã lưu là giữ các thay đổi ui ngay cả khi ứng dụng của bạn đã bị hủy trong nền. Vì vậy, ứng dụng của bạn sẽ tiếp tục tại thời điểm đó còn lại ngay cả khi nó không còn trong bộ nhớ của thiết bị của bạn.

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