Vòng đời hoạt động của Android - tất cả những phương pháp này để làm gì?


420

Vòng đời của một hoạt động Android là gì? Tại sao rất nhiều phương pháp tương tự âm ( onCreate(), onStart(), onResume()) gọi là trong quá trình khởi, và rất nhiều người khác (onPause() , onStop(), onDestroy()) gọi là lúc kết thúc?

Khi nào các phương thức này được gọi, và chúng nên được sử dụng như thế nào cho đúng?


17
Tại sao câu hỏi này đã được nêu lên rất nhiều lần? Tại sao nó chưa bị đóng cửa?
Alexander Kulyakhtin

54
Tại sao đóng một câu hỏi với rất nhiều upvote? Stackoverflow có một thói quen xấu đó.
Dick Lucas

12
Đây là một câu hỏi theo kiểu wiki và tôi cảm thấy nó nên được cho phép trên trang web.
Mateen Ulhaq

2
@Alexander Kulyakhtin - Tại sao phải đóng câu hỏi này? Thay vào đó, bạn nên đóng tài khoản của mình nếu bạn không thể tiêu hóa thông tin được cung cấp trong câu trả lời cho những người dùng Android mới. Câu hỏi này chứa đầy kiến ​​thức và tôi sẽ bỏ phiếu cho câu hỏi này.
Chồng tràn

Vì khi nào các phương pháp này được gọi là câu hỏi, bạn đã thử những gì?
Saletanth Karumanaghat 16/12/19

Câu trả lời:


748

Xem nó trong Vòng đời hoạt động (tại Nhà phát triển Android).

Nhập mô tả hình ảnh ở đây

onCreate () :

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

onRestart () :

Được gọi sau khi hoạt động của bạn đã bị dừng, trước khi nó được bắt đầu lại. Luôn theo sau bởi onStart ()

bắt đầu () :

Được gọi khi hoạt động đang trở nên hiển thị cho người dùng. Tiếp theo là onResume () nếu hoạt động đến tiền cảnh.

onResume () :

Được gọi khi hoạt động sẽ bắt đầu tương tác với người dùng. Tại thời điểm này, hoạt động của bạn nằm ở đầu ngăn xếp hoạt động, với đầu vào của người dùng sẽ đến đó. Luôn luôn theo sau bởi onPause ().

onPause () :

Được gọi là một phần của vòng đời hoạt động khi một hoạt động đang đi vào nền, nhưng chưa (chưa) bị giết. Bản sao của onResume (). Khi hoạt động B được khởi chạy trước hoạt động A, cuộc gọi lại này sẽ được gọi vào A. B sẽ không được tạo cho đến khi onPause () của A trở lại, vì vậy hãy chắc chắn không làm gì dài dòng ở đây.

trênStop () :

Được gọi khi bạn không còn hiển thị cho người dùng. Tiếp theo, bạn sẽ nhận được onRestart (), onDestroy () hoặc không có gì, tùy thuộc vào hoạt động của người dùng sau này. Lưu ý rằng phương thức này có thể không bao giờ được gọi, trong các tình huống bộ nhớ thấp trong đó hệ thống không có đủ bộ nhớ để duy trì quá trình hoạt động của bạn sau khi phương thức onPause () của nó được gọi.

trênDestroy () :

Cuộc gọi cuối cùng bạn nhận được trước khi hoạt động của bạn bị phá hủy. Điều này có thể xảy ra do hoạt động đang kết thúc (ai đó gọi là finish () trên đó hoặc do hệ thống đang tạm thời phá hủy phiên bản hoạt động này để tiết kiệm không gian. Bạn có thể phân biệt giữa> hai kịch bản này với phương thức isFinishing ().

Khi Hoạt động lần đầu tải các sự kiện được gọi như dưới đây:

onCreate()
onStart()
onResume()

Khi bạn nhấp vào nút Điện thoại , Hoạt động sẽ chuyển sang nền và các sự kiện bên dưới được gọi là:

onPause()
onStop()

Thoát trình quay số điện thoại và các sự kiện dưới đây sẽ được gọi:

onRestart()
onStart()
onResume()

Khi bạn nhấp vào nút quay lại HOẶC cố gắng kết thúc () hoạt động, các sự kiện được gọi như dưới đây:

onPause()
onStop()
onDestroy()

Hoạt động quốc gia

Hệ điều hành Android sử dụng hàng đợi ưu tiên để hỗ trợ quản lý các hoạt động đang chạy trên thiết bị. Dựa trên trạng thái của một hoạt động Android cụ thể, nó sẽ được chỉ định một mức độ ưu tiên nhất định trong HĐH. Hệ thống ưu tiên này giúp Android xác định các hoạt động không còn được sử dụng, cho phép HĐH lấy lại bộ nhớ và tài nguyên. Sơ đồ sau minh họa các trạng thái mà một hoạt động có thể đi qua, trong suốt vòng đời của nó:

Những trạng thái này có thể được chia thành ba nhóm chính như sau:

Hoạt động hoặc đang chạy - Các hoạt động được coi là hoạt động hoặc đang chạy nếu chúng ở phía trước, còn được gọi là đỉnh của ngăn xếp hoạt động. Đây được coi là hoạt động ưu tiên cao nhất trong ngăn xếp Hoạt động của Android và như vậy sẽ chỉ bị HĐH giết chết trong các tình huống cực đoan, chẳng hạn như nếu hoạt động cố gắng sử dụng nhiều bộ nhớ hơn khả dụng trên thiết bị vì điều này có thể khiến UI bị trở nên không phản hồi.

Tạm dừng - Khi thiết bị chuyển sang chế độ ngủ hoặc hoạt động vẫn hiển thị nhưng bị ẩn một phần bởi hoạt động mới, không có kích thước đầy đủ hoặc trong suốt, hoạt động được coi là tạm dừng. Các hoạt động bị tạm dừng vẫn còn tồn tại, nghĩa là chúng duy trì tất cả thông tin về trạng thái và thành viên và vẫn được đính kèm với trình quản lý cửa sổ. Đây được coi là hoạt động ưu tiên cao thứ hai trong ngăn xếp Hoạt động của Android và do đó, sẽ chỉ bị HĐH giết chết nếu việc hủy hoạt động này sẽ đáp ứng các yêu cầu tài nguyên cần thiết để giữ cho Hoạt động / Hoạt động ổn định và đáp ứng.

Đã dừng - Các hoạt động bị che khuất hoàn toàn bởi một hoạt động khác được coi là dừng hoặc ở chế độ nền. Các hoạt động bị dừng vẫn cố gắng giữ thông tin trạng thái và thành viên của họ càng lâu càng tốt, nhưng các hoạt động bị dừng được coi là ưu tiên thấp nhất của ba tiểu bang và do đó, HĐH sẽ giết các hoạt động ở trạng thái này trước để đáp ứng các yêu cầu tài nguyên của các hoạt động ưu tiên cao hơn.

* Hoạt động mẫu để hiểu vòng đời **

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
    String tag = "LifeCycleEvents";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Log.d(tag, "In the onCreate() event");
    }
    public void onStart()
    {
       super.onStart();
       Log.d(tag, "In the onStart() event");
    }
    public void onRestart()
    {
       super.onRestart();
       Log.d(tag, "In the onRestart() event");
    }
    public void onResume()
    {
       super.onResume();
       Log.d(tag, "In the onResume() event");
    }
    public void onPause()
    {
       super.onPause();
       Log.d(tag, "In the onPause() event");
    }
    public void onStop()
    {
       super.onStop();
       Log.d(tag, "In the onStop() event");
    }
    public void onDestroy()
    {
       super.onDestroy();
       Log.d(tag, "In the onDestroy() event");
    }
}

1
Vì vậy, nếu tôi hiểu chính xác thì onStop () luôn được gọi sau onPause ()?
Titouan de Bailleul

4
KHÔNG phải luôn luôn, "onStop (): Được gọi khi bạn không còn hiển thị cho người dùng"
Yaqub Ahmad

2
Có bất cứ điều gì bởi bất kỳ cơ hội nào được gọi trước khi onCreate không?
NodeDad

6
Có, đó là hàm tạo mặc định (đó là hàm không có tham số). Nhưng nó chỉ được sử dụng rất hạn chế cho các mục đích khởi tạo rất cơ bản. Thông thường bạn không nên sử dụng nó trừ khi bạn thực sự biết những gì bạn đang làm. Và thậm chí sau đó bạn nên suy nghĩ kỹ nếu có cách làm tốt hơn.
Mjoellnir

1
Tôi nghĩ rằng liên kết này có thể giúp bạn hiểu vòng đời của hoạt động theo cách tốt hơn. iphtechnology.com/under Hiểu
Ashish Kumar Mishra

162

Hoạt động có sáu trạng thái

  • Tạo
  • Đã bắt đầu
  • Đã tiếp tục
  • Tạm dừng
  • Ngừng
  • Phá hủy

Vòng đời hoạt động có bảy phương thức

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onRestart()
  • onDestroy()

vòng đời hoạt động

Tình huống

  • Khi mở ứng dụng

    onCreate() --> onStart() -->  onResume()
  • Khi nhấn nút quay lại và thoát khỏi ứng dụng

    onPaused() -- > onStop() --> onDestory()
  • Khi nhấn nút Home

    onPaused() --> onStop()
  • Sau khi nhấn nút home khi mở lại ứng dụng từ danh sách tác vụ gần đây hoặc nhấp vào biểu tượng

    onRestart() --> onStart() --> onResume()
  • Khi mở ứng dụng, một ứng dụng khác từ thanh thông báo hoặc cài đặt mở

    onPaused() --> onStop()
  • Nút quay lại được nhấn từ một ứng dụng hoặc cài đặt khác sau đó được sử dụng có thể thấy ứng dụng của chúng tôi

    onRestart() --> onStart() --> onResume()
  • Khi bất kỳ hộp thoại nào mở trên màn hình

    onPause()
  • Sau khi bỏ hộp thoại hoặc nút quay lại khỏi hộp thoại

    onResume()
  • Bất kỳ điện thoại nào đổ chuông và người dùng trong ứng dụng

    onPause() --> onResume() 
  • Khi người dùng nhấn nút trả lời điện thoại

    onPause()
  • Sau khi kết thúc cuộc gọi

    onResume()
  • Khi màn hình điện thoại tắt

    onPaused() --> onStop()
  • Khi màn hình được bật lại

    onRestart() --> onStart() --> onResume()

6
'Khi bất kỳ hộp thoại nào mở trên màn hình, onPause () được gọi là', không đúng với cảnh báo. Nó chỉ được gọi khi hộp thoại tự nó là một hoạt động của hộp thoại (có chủ đề được đặt thành @android: style / Theme.Dialog).
gaurav jain

2
Câu trả lời có giá trị. Đừng gửi cái này lên google để thêm vào tài liệu của họ. Tôi đang lưu câu trả lời của bạn vào một tài liệu Word để giữ!
likejudo

Tôi không hiểu "Bất kỳ điện thoại nào đổ chuông và người dùng trong ứng dụng". Kịch bản chính xác là gì? Mặc dù vậy, điều đầu tiên của tôi là nếu người dùng đang ở trong ứng dụng và điện thoại bắt đầu đổ chuông thì đó sẽ là onPause () -> onStop () trong trường hợp toàn màn hình trở thành cuộc gọi. Đối với tin nhắn cuộc gọi đến dự phòng có thể chỉ là OnResume -> onPause () nhưng tôi không chắc về điều này. Tình huống trong lệnh gọi onPause -> onResume là gì? Là vào cuối cuộc gọi?
Sotti

Đây là những gì tôi đang tìm kiếm. Chỉ muốn biết tôi nên gọi api ở đâu.
Heisenberg

Tôi thích câu trả lời dựa trên kịch bản của bạn .
kokabi

155

Toàn bộ sự nhầm lẫn được gây ra do Google chọn các tên không trực quan thay vì một cái gì đó như sau:

onCreateAndPrepareToDisplay()   [instead of onCreate() ]
onPrepareToDisplay()            [instead of onRestart() ]
onVisible()                     [instead of onStart() ]
onBeginInteraction()            [instead of onResume() ]
onPauseInteraction()            [instead of onPause() ]
onInvisible()                   [instead of onStop]
onDestroy()                     [no change] 

Sơ đồ hoạt động có thể được hiểu là:

nhập mô tả hình ảnh ở đây


1
Phụ thuộc. Trừ khi nó giải quyết được sự nhầm lẫn, một cái tên dài sẽ không bị tổn thương. Ví dụ: onRoutePftimeationDisplayChanged () có rất nhiều chức năng từ bên trong SDK Android
Nilesh Pawar

12
Cá nhân tôi không tìm thấy tên của bạn trực quan hơn, cộng với Fragment, nó không thực sự tương quan.
Martin Marconcini

9
Nâng cao.
Hữu

3
Đó là một bài viết tuyệt vời. Một vấn đề. Khi bạn nhập các phương thức Vòng đời Andoid vào google, hình ảnh này xuất hiện phía trên tùy chọn tìm kiếm (thậm chí không ở chế độ tìm kiếm hình ảnh) làm câu trả lời cho các phương pháp vòng đời của Android. Việc không biết (hoặc lười biếng tùy thuộc vào cách bạn nhìn vào nó) có thể dễ dàng bị đánh lừa trừ khi họ theo liên kết StackOverflow thay vì nhấp vào hình ảnh sơ đồ (hình ảnh của bạn).
Andrew S

1
Đúng. Đây là những gì tôi đã tìm kiếm. Ai đó nên viết một cuốn sách (hoặc một tài liệu?) Với những thứ như thế này. onResume, vv không có ý nghĩa.
Harsha_K

22

ANDROID CUỘC SỐNG

Có bảy phương pháp quản lý vòng đời của ứng dụng Android:


Trả lời cho những gì tất cả các phương pháp này cho:

Chúng ta hãy lấy một kịch bản đơn giản trong đó việc biết theo thứ tự các phương thức này được gọi sẽ giúp chúng ta làm rõ lý do tại sao chúng được sử dụng.

  • Giả sử bạn đang sử dụng một ứng dụng máy tính. Ba phương pháp được gọi liên tiếp để bắt đầu ứng dụng.

onCreate() - - -> - - ->onStart() onResume()

  • Khi tôi đang sử dụng ứng dụng máy tính, đột nhiên có một cuộc gọi đến. Các hoạt động máy tính đi đến nền và hoạt động khác nói. Xử lý cuộc gọi đến tiền cảnh, và bây giờ hai phương thức được gọi liên tiếp.

onPause() - - -> onStop()

  • Bây giờ nói rằng tôi kết thúc cuộc trò chuyện trên điện thoại, hoạt động của máy tính xuất hiện từ nền sau, vì vậy ba phương thức được gọi liên tiếp.

onRestart() - - -> - - ->onStart() onResume()

  • Cuối cùng, giả sử tôi đã hoàn thành tất cả các tác vụ trong ứng dụng máy tính và tôi muốn thoát khỏi ứng dụng. Tương lai hai phương pháp được gọi là liên tiếp.

onStop() - - -> onDestroy()


Có bốn trạng thái mà một hoạt động có thể tồn tại:

  • Nhà nước khởi đầu
  • Chạy trạng thái
  • Tạm dừng
  • Trạng thái dừng

Nhà nước bắt đầu bao gồm:

Tạo một quy trình Linux mới, phân bổ bộ nhớ mới cho các đối tượng UI mới và thiết lập toàn bộ màn hình. Vì vậy, hầu hết các công việc có liên quan ở đây.

Chạy trạng thái bao gồm:

Đó là hoạt động (trạng thái) hiện trên màn hình. Trạng thái này một mình xử lý những việc như gõ trên màn hình, và chạm và nhấp vào nút.

Tạm dừng bao gồm:

Khi một hoạt động không ở phía trước và thay vào đó là ở chế độ nền, thì hoạt động đó được cho là ở trạng thái tạm dừng.

Trạng thái dừng bao gồm:

Một hoạt động bị dừng chỉ có thể được mua vào tiền cảnh bằng cách khởi động lại nó và nó cũng có thể bị phá hủy tại bất kỳ thời điểm nào.

Trình quản lý hoạt động xử lý tất cả các trạng thái này theo cách sao cho trải nghiệm và hiệu suất của người dùng luôn ở mức tốt nhất ngay cả trong các tình huống trong đó hoạt động mới được thêm vào các hoạt động hiện có


bất kỳ ví dụ nào cho onPause to onResume ?
zeeali

14

Tôi thích câu hỏi này và câu trả lời cho nó, nhưng cho đến nay không có phạm vi bảo hiểm của các cuộc gọi lại ít được sử dụng như onPostCreate () hoặc onPostResume () . Steve Pomeroy đã thử một sơ đồ bao gồm những sơ đồ này và cách chúng liên quan đến vòng đời Mảnh vỡ của Android , tại https://github.com/xxv/android-lifecycle . Tôi đã sửa đổi sơ đồ lớn của Steve để chỉ bao gồm phần Hoạt động và định dạng nó cho bản in một trang cỡ chữ. Tôi đã đăng nó dưới dạng PDF văn bản tại https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf và bên dưới là hình ảnh của nó:

Vòng đời hoạt động của Android


8

Từ trang Nhà phát triển Android,

onPause ():

Được gọi khi hệ thống sắp bắt đầu hoạt động trở lại. Điều này thường được sử dụng để thực hiện các thay đổi chưa được lưu đối với dữ liệu liên tục, dừng hoạt ảnh và những thứ khác có thể đang tiêu thụ CPU, v.v. Việc triển khai phương pháp này phải rất nhanh vì hoạt động tiếp theo sẽ không được tiếp tục cho đến khi phương thức này trở lại. Tiếp theo là onResume () nếu hoạt động quay trở lại phía trước hoặc onStop () nếu nó trở nên vô hình với người dùng.

dừng lại():

Được gọi khi hoạt động không còn hiển thị cho người dùng, bởi vì một hoạt động khác đã được nối lại và đang bao trùm hoạt động này. Điều này có thể xảy ra hoặc vì một hoạt động mới đang được bắt đầu, một hoạt động hiện tại đang được đưa ra trước hoạt động này hoặc hoạt động này đang bị phá hủy. Tiếp theo là onRestart () nếu hoạt động này quay trở lại để tương tác với người dùng hoặc onDestroy () nếu hoạt động này sẽ biến mất.

Bây giờ, giả sử có ba Hoạt động và bạn đi từ A đến B, sau đó onP Because of A sẽ được gọi từ B đến C, sau đó onP Because of B và onStop of A sẽ được gọi.

Hoạt động bị tạm dừng được tiếp tục và Dừng lại được khởi động lại.

Khi bạn gọi this.finish() , onPause-onStop-onDestroy sẽ được gọi. Điều chính cần nhớ là: Các hoạt động bị tạm dừng bị dừng và một hoạt động bị dừng bị hủy bất cứ khi nào Android yêu cầu bộ nhớ cho các hoạt động khác.

Tôi hy vọng nó đủ rõ ràng.


chúng ta có thể gọi phương thức OnPause là giai đoạn trung gian giữa hoạt động bắt đầu mất tập trung và cuối cùng nó trở nên bất khả xâm phạm đối với người dùng và phương thức Onstop như khi hoạt động trở nên hoàn toàn bất khả xâm phạm đối với người dùng
Nav

Tôi nghĩ nó nên như thế.
Masiar

3
@Nav Giả sử có 3 Hoạt động và Bạn đi từ A đến B, sau đó onP Because of A sẽ được gọi từ B đến C sau đó onP Because of B và onStop of A sẽ được gọi.
MKJParekh

3

Thêm một số thông tin vào đầu câu trả lời được đánh giá cao (Đã thêm phần bổ sung của KILLABLE và bộ phương pháp tiếp theo, sẽ được gọi trong vòng đời):

Nguồn: developer.android.com

nhập mô tả hình ảnh ở đây

Lưu ý "Có thể giết được " trong bảng trên - đối với các phương thức được đánh dấu là có thể hủy được, sau khi phương thức đó trả về quy trình lưu trữ, hoạt động có thể bị hệ thống giết bất cứ lúc nào mà không có dòng mã nào khác được thực thi.

Do đó, bạn nên sử dụng onPause()phương pháp để ghi bất kỳ dữ liệu liên tục nào (chẳng hạn như chỉnh sửa của người dùng) để lưu trữ. Ngoài ra, phương thức onSaveInstanceState(Bundle)được gọi trước khi đặt hoạt động ở trạng thái nền như vậy, cho phép bạn lưu bất kỳ trạng thái động nào trong hoạt động của bạn vào trạng thái đã cho Bundle, để được nhận sau onCreate(Bundle)nếu hoạt động cần được tạo lại.

Lưu ý rằng điều quan trọng là phải lưu dữ liệu liên tục onPause()thay onSaveInstanceState(Bundle)vì vì sau này không phải là một phần của các cuộc gọi lại vòng đời, do đó sẽ không được gọi trong mọi tình huống như được mô tả trong tài liệu của nó.

Tôi muốn thêm một vài phương pháp. Chúng không được liệt kê như các phương pháp vòng đời nhưng chúng sẽ được gọi trong suốt vòng đời tùy thuộc vào một số điều kiện. Tùy thuộc vào yêu cầu của bạn, bạn có thể phải thực hiện các phương pháp này trong ứng dụng của mình để xử lý trạng thái phù hợp.

onPostCreate(Bundle savedInstanceState)

Được gọi khi hoạt động khởi động hoàn tất (sau onStart()onRestoreInstanceState(Bundle)đã được gọi).

onPostResume()

Được gọi khi hoạt động tiếp tục hoàn thành (sau khi onResume()đã được gọi).

onSaveInstanceState(Bundle outState)

Được gọi để truy xuất trạng thái theo trường hợp từ một hoạt động trước khi bị giết để trạng thái có thể được khôi phục trong onCreate(Bundle)hoặc onRestoreInstanceState(Bundle)(Gói được điền bằng phương thức này sẽ được truyền cho cả hai).

onRestoreInstanceState(Bundle savedInstanceState)

Phương thức này được gọi sau onStart()khi hoạt động đang được khởi tạo lại từ trạng thái đã lưu trước đó, được đưa ra ở đây trong savedInstanceState.

Mã ứng dụng của tôi sử dụng tất cả các phương thức sau:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText txtUserName;
    private EditText txtPassword;
    Button  loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("Ravi","Main OnCreate");
        txtUserName=(EditText) findViewById(R.id.username);
        txtPassword=(EditText) findViewById(R.id.password);
        loginButton =  (Button)  findViewById(R.id.login);
        loginButton.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        Log.d("Ravi", "Login processing initiated");
        Intent intent = new Intent(this,LoginActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("userName",txtUserName.getText().toString());
        bundle.putString("password",txtPassword.getText().toString());
        intent.putExtras(bundle);
        startActivityForResult(intent,1);
       // IntentFilter
    }
    public void onActivityResult(int requestCode, int resultCode, Intent resIntent){
        Log.d("Ravi back result:", "start");
        String result = resIntent.getStringExtra("result");
        Log.d("Ravi back result:", result);
        TextView txtView = (TextView)findViewById(R.id.txtView);
        txtView.setText(result);

        Intent sendIntent = new Intent();
        //sendIntent.setPackage("com.whatsapp");
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, "Message...");
        sendIntent.setType("text/plain");
        startActivity(sendIntent);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("Ravi","Main Start");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("Ravi","Main ReStart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("Ravi","Main Pause");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("Ravi","Main Resume");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("Ravi","Main Stop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("Ravi","Main OnDestroy");
    }

    @Override
    public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onPostCreate(savedInstanceState, persistentState);
        Log.d("Ravi","Main onPostCreate");
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        Log.d("Ravi","Main PostResume");
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }
}

Hoạt động đăng nhập:

public class LoginActivity extends AppCompatActivity {

    private TextView txtView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        txtView = (TextView) findViewById(R.id.Result);
        Log.d("Ravi","Login OnCreate");
        Bundle bundle = getIntent().getExtras();
        txtView.setText(bundle.getString("userName")+":"+bundle.getString("password"));
        //Intent  intent = new Intent(this,MainActivity.class);
        Intent  intent = new Intent();
        intent.putExtra("result","Success");
        setResult(1,intent);
       // finish();
    }
}

đầu ra: (Trước khi tạm dừng)

D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume

đầu ra: (Sau khi tiếp tục từ tạm dừng)

D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume

Lưu ý rằng onPostResume()được gọi ngay cả khi nó không được trích dẫn là phương pháp vòng đời.


0

Tôi chạy một số nhật ký theo câu trả lời ở trên và đây là đầu ra:

Hoạt động bắt đầu

On Activity Load (First Time)
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

Reload After BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

Dừng hoạt động

On BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 
D/IndividualChatActivity: onDestroy: 

OnMinimize (Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

OnMinimize (Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

Going To Another Activity
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 

Close The App
————————————————————————————————————————————————
D/IndividualChatActivity: onDestroy: 

Theo ý kiến ​​cá nhân của tôi, chỉ có hai là bắt buộc trênStart và onStop.

onResume dường như trong mọi trường hợp nhận lại và onPause trong mọi trường hợp rời khỏi (ngoại trừ việc đóng ứng dụng).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.