検索
ホームページJava&#&チュートリアルAndroid開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

この記事では、Activity のライフ サイクルについて紹介します。iOS を学習したことがある方なら、Activity のライフ サイクルは iOS の ViewController のライフ サイクルと非常に似ています。ライフサイクルを理解するのは難しくありません。人の一生は生老病死に他なりませんが、花の一生は咲いて散るのです。 Android における Activity のライフ サイクルは、Activity の作成から消滅までのプロセスにほかなりません。このブログでは、アクティビティのライフ サイクルのさまざまな段階を紹介し、例を通してアクティビティのライフ サイクルを覗いていきます。各ライフサイクルの各段階を理解することによってのみ、異なる段階で異なることを実行できるため、アクティビティのライフサイクルを理解することが重要です。

次に、例を通してアクティビティのライフサイクルを紹介します。このデモでは、MainActivity がアプリの起動後に表示される最初のアクティビティになります。 MainActivity にボタンがあります。このボタンをクリックすると SecondActivity にジャンプします。リターンキーをクリックすると、SecondActivity から MainActivity に戻ります。この一連のアクティビティの切り替えを通じて、ログを出力することでアクティビティのライフサイクルを観察します。

1. コードの作成

実際、このブログのコードは非常に単純です。アクティビティのライフ サイクルのさまざまな段階のメソッドを書き換えて、このライフ サイクルの段階をマークするメソッドを出力します。 。デモの UI も非常にシンプルなので、アクティビティ レイアウト ファイルについてはあまり詳しく説明しません。次に、2 つのアクティビティのキー コードを見てみましょう。

1. 以下のコードは、MainActivity の主要なコードであり、アクティビティのライフサイクルのさまざまな段階を書き換えて、どのアクティビティのどのメソッドをマークするかをログに出力します。 onCreate() メソッドの ID でボタンを取得し、クリック イベントをボタンにバインドし、ボタンがクリックされたときに SecondActivity にジャンプします。具体的なコードは以下の通りです。

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("lifeCycle", "MainActivity: 我是onCreate方法,我会在Activity第一次被创建是调用");
    Button jumpButton = (Button) findViewById(R.id.jump_second_button);
    jumpButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //跳转到SecondActivity
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        startActivity(intent);
      }
    });
  }
  //Ctrl + O 选择父类中的方法进行重写
  @Override
  protected void onStart() {
    super.onStart();
    Log.d("lifeCycle", "MainActivity: 我是onStart方法,我会在Activity由不可见变为可见时调用");
  }
  @Override
  protected void onResume() {
    super.onResume();
    Log.d("lifeCycle", "MainActivity: 我是onResume方法,我在Activity处于运行状态时调用");
  }
  @Override
  protected void onPause() {
    super.onPause();
    Log.d("lifeCycle", "MainActivity: 我是onPause方法,我会在Activity暂停时调用");
  }
  @Override
  protected void onStop() {
    super.onStop();
    Log.d("lifeCycle", "MainActivity: 我是onStop方法,我会在Activity停止时调用");
  }
  @Override
  protected void onRestart() {
    super.onRestart();
    Log.d("lifeCycle", "MainActivity: 我是onRestart方法,我会在Activty从停止状态变为运行状态时调用");
  }
  @Override
  protected void onDestroy() {
    super.onDestroy();
    Log.d("lifeCycle", "MainActivity: 我是onDestroy方法,我会在Activty销毁之前调用");
  }

2. 上記のメソッドも SecondActivity に書き換えられます。唯一の違いは、上記のログの MainActivity を SecondActivity に変更することです。コードは同様なので、上には貼り付けません。

2. 印刷されたログを実行して観察します

アプリを実行し、印刷されたログを観察し、例を通じてアクティビティのライフ サイクルを分析します。具体的な手順は次のとおりです。

1. アクティビティを作成してアクティブ化します

アプリを初めて開いたときに出力されるログは次のとおりです。 MainActivity は、アプリを開いたときに最初に表示されるもので、MainActivity が初めて表示されるときに次の 3 つのメソッドを呼び出す必要があることが簡単にわかります。以下の 3 つのメソッドの後、MainActivity が作成されて表示されます。 、ようやく実行状態になります。

(1).onCreate() メソッド: このメソッドは、アクティビティが初めて作成されるときに呼び出されます。前のデモでは、アクティビティのレイアウトやコントロール、および関連するイベントをこのメソッドに読み込みました。

(2).onStar()t メソッド: 次に、アクティビティが非表示から表示に変更されると、このメソッドが呼び出されます。

(3).onResume メソッド: Activity が表示された後、onResume メソッドを呼び出して実行状態に変更する必要があります。

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

2. アクティビティ間の切り替え

より明確にするために、SecondActivity にジャンプするボタンをクリックする前に、以前のログをクリアするために使用されるゴミ箱のサインが下にあります。印刷されたログ。以下に出力されるログは、ジャンプボタンをクリックしたときに出力されるログです。この切り替えプロセス中に、MianActivty は実行を停止して非表示になり、SecondActivy が作成されて実行状態になります。具体的な手順は以下の通りです。

(1).onPause() メソッド: ジャンプ ボタンをクリックすると、実行中の MainActivity が onPause() を呼び出して停止しますが、まだ表示されています。

(2). 次に、SecondActivity は、作成する onCreate() メソッド、表示する onStart() メソッド、および実行する onResume() メソッドを呼び出します。

(3).onStop() メソッド: SecondActivity の実行中、MainActivity は完全に非表示になるため、onStop() メソッドが呼び出され、完全に非表示の停止状態に入ります。

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

3. 別のアクティビティから戻る

SecondActivity からリターンキーをクリックすると、SecondActivity から MainActivity に戻ります。以下のログは、戻るボタンをクリックしたときに出力されるログです。

(1) onPause() メソッド: 戻るボタンをクリックした後、SecondActivity は onPause() メソッドを呼び出し、一時停止された実行状態に入ります。

(2)onRestart() メソッド: MainActivity は onRestart() メソッドを呼び出して、停止状態から実行状態に変更します。次に、MainActivity は onStart メソッドを非表示から表示に呼び出し、次に onResume() メソッドを呼び出して最終的に実行状態に入ります。

(3)当返回到MainActivity中并且MainActivity处于运行状态后,SecondActivity会调用onStop方法,停止运行并不可见。因为SecondActivty做的事出栈操作,停止运行后,就会调用onDestory方法进行销毁。下此在进入SecondActivity中时,还是从onCreate方法进行执行。

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

4.Activity退出并销毁

接着在MainActivity中点击返回按钮就会退出App了,下方是退出App时打印的Log信息。MainActivty先调用onPause()方法变为暂停运行状态,然后再调用onStop()方法停止运行,最后调用onDestroy()方法进行销毁。

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

三.生命周期流程图

1.上面是用语言通过实例打印出的Log来描述两个Activity切换的生命周期,接下来将用一个流程图来描述这一过程,具体流程图如下。

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

2.通过上面的实例不难分析出一个Activity的生命周期分为哪些阶段,并且很容易的看出哪些阶段在什么时候执行,所以我们很容易的画出一个Activity的生命周期,下方的流程图是一个Activity的生命周期。

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

四.Activity的加载模式

Activity的启用模式也较为简单,它会在活动切换时用到。Activity的启动模式分为四种,standard、singleTop、singleTask、singleInstance模式。接下来将为大家详细的介绍一下这几种加载模式。

Activity的加载模式可以在配置文件AndroidManifest.xml中进行配置,配置项为android:launchMode具体如下图所示:

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

1.standard模式

在Activity的栈中无论该活动有没有加入栈,活动就会被创建。测试方式是把MainActivity的launchMode设置成standard, 在MainActivity中添加一个按钮,点击按钮使用Intent跳转到当前Activity,看onCreate方法中打印的Log。点击按钮的方法如下:

Button launchModelButton = (Button) findViewById(R.id.launch_model_button);
    launchModelButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, MainActivity.class);
        startActivity(intent);
      }
    });

   

standard加载模式的栈如下所示,无论栈中有没有该对象的实例,都会被创建。

2.singleTop模式

只要被创建的活动不位于栈的顶部,该活动就会被创建入栈。如果将要被创建的活动位于栈的顶部,该活动的实例就不会被创建。测试方法,把上面的模式直接改成singleTop模式,MainActivty往自己身上跳转就不会从新创建一个新的实例,会重用之前在栈顶中的实例。如果是MainActivty跳转到SecondActivty, 然后SecondActivity再次跳转到MainActivty, 那么此时的MainActivity将会被创建,因为栈顶是SecondActivity。如下所示:

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

3.singleTask模式

单任务模式,这个也不难理解,如果从MainActivty跳转到SecondActivity, 如果再从SecondActivty跳转到MainActivity, 在单任务模式下MainActivity已经在栈中,就会把它之前的Activity出栈,使其处于在栈顶活跃的位置。原理如下图所示:

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

4.singleInstance

可以看成单例模式,这个比较特殊,被设置成singleInstance的Activity将会放入另一个栈中,因为这样为了便于共用。上面3中模式位于同一个栈中。下方ThirdActivity跳转到一个加载模式为singleInstance的Activity中。

Android開発におけるActivityのライフサイクルと読み込みモードについて詳しく解説

今日のアクティビティのライフサイクルはここまでです。関連するコンテンツは次のブログで更新されます。

Android 開発におけるアクティビティのライフサイクルと読み込みモードの詳細な説明については、PHP 中国語 Web サイトに注目してください。


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JVMのクラスローダーサブシステムは、プラットフォームの独立性にどのように貢献していますか?JVMのクラスローダーサブシステムは、プラットフォームの独立性にどのように貢献していますか?Apr 23, 2025 am 12:14 AM

クラスローダーは、統一されたクラスファイル形式、動的読み込み、親代表団モデル、プラットフォーム非依存バイトコードを通じて、さまざまなプラットフォーム上のJavaプログラムの一貫性と互換性を保証し、プラットフォームの独立性を実現します。

Javaコンパイラはプラットフォーム固有のコードを作成しますか?説明する。Javaコンパイラはプラットフォーム固有のコードを作成しますか?説明する。Apr 23, 2025 am 12:09 AM

Javaコンパイラによって生成されたコードはプラットフォームに依存しませんが、最終的に実行されるコードはプラットフォーム固有です。 1。Javaソースコードは、プラットフォームに依存しないバイトコードにコンパイルされます。 2。JVMは、特定のプラットフォームのバイトコードをマシンコードに変換し、クロスプラットフォーム操作を保証しますが、パフォーマンスは異なる場合があります。

JVMは、さまざまなオペレーティングシステムでマルチスレッドをどのように処理しますか?JVMは、さまざまなオペレーティングシステムでマルチスレッドをどのように処理しますか?Apr 23, 2025 am 12:07 AM

マルチスレッドは、プログラムの応答性とリソースの利用を改善し、複雑な同時タスクを処理できるため、最新のプログラミングで重要です。 JVMは、スレッドマッピング、スケジューリングメカニズム、同期ロックメカニズムを介して、異なるオペレーティングシステム上のマルチスレッドの一貫性と効率を保証します。

Javaの文脈では、「プラットフォームの独立」とはどういう意味ですか?Javaの文脈では、「プラットフォームの独立」とはどういう意味ですか?Apr 23, 2025 am 12:05 AM

Javaのプラットフォームの独立性とは、書かれたコードがJVMが変更なしでインストールされた任意のプラットフォームで実行できることを意味します。 1)JavaソースコードはBytecodeにコンパイルされ、2)BytecodeはJVMによって解釈および実行されます、3)JVMは、プログラムが異なるオペレーティングシステムで実行されることを確認するために、メモリ管理とガベージコレクション機能を提供します。

Javaアプリケーションは、プラットフォーム固有のバグや問題に遭遇する可能性がありますか?Javaアプリケーションは、プラットフォーム固有のバグや問題に遭遇する可能性がありますか?Apr 23, 2025 am 12:03 AM

JavaApplicationScanIndEDENCOUNTIONPLATFORM-SPECISTESUESUSESEJVM'SABSTRACTION.REASONSINCLUDE:1)NativeCodeandLibraries、2)OperatingSystemDifferences、3)JVMimplementationVariations、および4)HardweardePencies.TomiteTETETETESES、DEVELAPERSHOULD:1)

クラウドコンピューティングは、Javaのプラットフォーム独立の重要性にどのような影響を与えますか?クラウドコンピューティングは、Javaのプラットフォーム独立の重要性にどのような影響を与えますか?Apr 22, 2025 pm 07:05 PM

クラウドコンピューティングにより、Javaのプラットフォームの独立性が大幅に向上します。 1)JavaコードはBytecodeにコンパイルされ、異なるオペレーティングシステムでJVMによって実行され、クロスプラットフォーム操作が確保されます。 2)DockerとKubernetesを使用してJavaアプリケーションを展開して、携帯性とスケーラビリティを向上させます。

Javaのプラットフォームの独立性は、その広範な採用においてどのような役割を果たしましたか?Javaのプラットフォームの独立性は、その広範な採用においてどのような役割を果たしましたか?Apr 22, 2025 pm 06:53 PM

java'splatformendenceallowsdevelopersowritecodeodeonceanceandonitondeviceoros withajvm.

コンテナ化テクノロジー(Dockerなど)は、Javaのプラットフォーム独立性の重要性にどのように影響しますか?コンテナ化テクノロジー(Dockerなど)は、Javaのプラットフォーム独立性の重要性にどのように影響しますか?Apr 22, 2025 pm 06:49 PM

Dockerなどのコンテナ化技術は、Javaのプラットフォームの独立性を置き換えるのではなく、強化します。 1)環境全体の一貫性を確保し、2)特定のJVMバージョンを含む依存関係を管理する、3)展開プロセスを簡素化して、Javaアプリケーションをより順応性と管理しやすくする。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、