Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明
Androidのアクティビティライフサイクルの詳しい説明
ソフトウェアとハードウェア環境
- Macbook Pro MGX 72
- Android Studio 1.3.2
- Genymotionエミュレータ
はじめに
Androidには、4つの主要な開発コンポーネントがあります, これらは Android プログラミングの基礎であり、Activity は最優先事項です。今日は、Activity のライフサイクルについて学びます。
アクティビティとは何ですか?
アクティビティは Android 開発で最も重要なコンポーネントであり、ほとんどすべての対話型操作はアクティビティで実行され、このウィンドウでは setContentView 関数を呼び出すことで必要な UI コントロールを表示できます。まず、Android API によって提供されるアクティビティ ライフ サイクル図を見てみましょう。最初は理解できなかった場合は、ブログ投稿全体を読んでから、戻って理解を深めてください。
いくつかの重要なコールバック関数
次のアクティビティ メソッドは、アクティビティのステータスが変化したときに、これらのメソッドをオーバーライドすることで特定の関数を実装できます。
<code class="none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;"> public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy();}</code>
onCreate
アクティビティが初めて作成されるときに呼び出されます。ビューの作成とデータの初期化はすべてここで実行されます。鋭い観察力を持つ方は、onCreate メソッドに Bundle SavedInstanceState パラメーターがあることに気づいたかもしれません。これは、アクティビティの以前の状態を保存するもので、非常に便利です。
onStart
はonCreateメソッド
の後に呼び出されますonResume
会在onStart方法后调用。activity是使用栈结构来管理的,此时activity处于栈顶。
onRestart
被stop的activity重新启动时调用此函数,后面会紧跟onResume。
onPause
当有新的activity进入栈顶,即当前activity被迫到后台运行,onPause就会被调用。
onStop
会在onPause方法后调用,此时activity对于用户来讲,已经是不可见的了(Invisible)。从栈的角度来说,就是有新的activity压栈,或者已经存在的activity回到了栈顶。
onDestroy
这是生命周期中的最后一个函数。一般情况下activity已经完成(调用finish函数)或者系统为了回收资源主动销毁activity时,onDestroy才会被调用,可以通过isFinishing()方法来区分这2种情况。
综上,从onCreate开始到onDestroy结束,称为activity的一个完整生命周期。这里还有2个概念需要区别一下。
<code class="none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">1. 可见的(Visible,从onStart到onStop,这里的可见,不仅仅是在屏幕上可见)2. 前台运行(Foreground,从onResume到onPause)</code>
为了弄明白这些回调函数在各种情况下的调用顺序,我们新建个工程,名叫ActivityLifecycle,在这些回调函数中加些打印,如下
<code class="none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText)findViewById(R.id.edittext); Log.d(TAG,"=== onCreate ===");}@Overrideprotected void onStart() { super.onStart(); Log.d(TAG,"=== onStart ===");}@Overrideprotected void onResume() { super.onResume(); Log.d(TAG, "=== onResume ===");}@Overrideprotected void onPause() { super.onPause(); Log.d(TAG, "=== onPause ===");}@Overrideprotected void onRestart() { super.onRestart(); Log.d(TAG, "=== onRestart ===");}@Overrideprotected void onStop() { super.onStop(); Log.d(TAG, "=== onStop ===");}@Overrideprotected void onDestroy() { super.onDestroy(); Log.d(TAG, "=== onDestroy ===");}</code>
运行一下程序,从Logcat中可以看到
说明了一个Activity从创建到显示出来需要执行onCreate-->onStart-->onResume三个方法。
アプリの実行中に他のアプリを開きたい場合、通常はホームボタンを押して終了します。このときのコールバックは何ですか?下の図を見てください
onPause-->onStop が実行されます。これは、アクティビティが破棄されていないが、他のアクティビティによって上書きされ、バックグラウンドで実行されていることを示しています。この状況は緊急事態に関連しています。 (着信がある場合やアプリがインストールされている場合) は同じで、緊急事態が終了すると、アクティビティは onRestart-->onStart-->onResume で実行され、以下に示すようにプロセス全体が出力されます。
アプリを実行中、現在のアクティビティが最後のアクティビティの場合、戻るキーを押すとプログラムは終了します。このとき、以下に示すように、onPause-->onStop-->onDestroy の 3 つのメソッドが次々に実行されます
次に、プロジェクトを少し変更し、クリックして SecondActivity という 2 番目のアクティビティを追加します。 MainActivity 上のボタン SecondActivity を入力すると、以下に示すように、SecondActivity は onPause-->onStop-->onDestroy を実行し、MainActivity は onRestart-->onStart-->onResume を実行します。
水平画面と垂直画面を切り替えます
処理は行われません。水平画面と垂直画面を切り替えて印刷を見ると、アクティビティが最初に破棄されてから再作成されていることがわかります
上記の問題には、一般的にいくつかの方法があります
- 禁止 横画面と縦画面の切り替え(横画面または縦画面に限定されます。これは少し不正で推奨されません)
- 横画面と縦画面の独立したレイアウト(2つのフォルダーレイアウトを作成します) land とlayout-port、対応する xml ファイルは変更されません)
- アクティビティの重複を防止します ダウンロード (AndroidManifest.xml に android:configChanges="keyboardHidden|orientation" を追加し、onConfigurationChanged メソッドをオーバーライドします)
ソース コードのダウンロード
http: //download.csdn.net/detail/djstavav/9147793
1. http://developer.android.com/intl/zh-cn/reference/android/app/Activity.html
2. //developer.android.com/guide/topics/manifest/activity-element.html3、http://developer.android.com/guide/topics/resources/runtime-changes.html
http://www.bkjia.com/PHPjc/1077807.html

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

OnLeaks は、X (旧 Twitter) のフォロワーから 4,000 ドル以上を集めようとして失敗した数日後、Android Headlines と提携して Galaxy S25 Ultra のファーストルックを提供しました。コンテキストとして、h の下に埋め込まれたレンダリング イメージ

TCLは、2つの新しいスマートフォンの発表に加えて、NXTPAPER 14と呼ばれる新しいAndroidタブレットも発表しました。その巨大な画面サイズはセールスポイントの1つです。 NXTPAPER 14 は、TCL の代表的なブランドであるマット LCD パネルのバージョン 3.0 を搭載しています。

Vivo Y300 Pro は完全に公開されたばかりで、大容量バッテリーを備えた最もスリムなミッドレンジ Android スマートフォンの 1 つです。正確に言うと、このスマートフォンの厚さはわずか 7.69 mm ですが、6,500 mAh のバッテリーを搭載しています。これは最近発売されたものと同じ容量です

サムスンは、ファンエディション(FE)スマートフォンシリーズをいつアップデートするかについて、まだ何のヒントも提供していない。現時点では、Galaxy S23 FE は 2023 年 10 月初めに発表された同社の最新版のままです。

ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

Redmi Note 14 Pro Plusは、昨年のRedmi Note 13 Pro Plus(Amazonで現在375ドル)の直接の後継者として正式に発表されました。予想通り、Redmi Note 14 Pro Plusは、Redmi Note 14およびRedmi Note 14 Proと並んでRedmi Note 14シリーズをリードします。李

OnePlus の姉妹ブランドである iQOO の製品サイクルは 2023 年から 4 年で、ほぼ終わりに近づいている可能性があります。それにもかかわらず、ブランドはまだZ9シリーズの開発を終えていないと宣言しました。その最終、そしておそらく最高エンドとなる Turbo+ バリアントが、予測どおりに発表されました。 T
