Androidの4つのアクティブコンポーネント(活動)

EDITORIAL

活動は Androidアプリケーションの重要なコンポーネント、プログラミング言語の数で、プログラムはmain()関数によって開始されていますが、Androidアプリの方法です開始する予定であるmain()関数でのAndroidプロジェクトで見つけることができません:を通じてコードアクティビティインスタンスを起動するために特定のコールバックメソッドに対応し、そのライフサイクルの特定の段階を呼び出すAndroidシステム。例えば、スタートがアプリケーションをクリックしたときに、Androidのシステムは、あなたが書くActicityのインスタンスを作成し、そのライフサイクルがのonCreate()とONSTART()および他の方法に値する、私たちは、後で特定をご紹介します呼び出します。この部分は、Androidの活動に個人が(私は初心者です、不正確があるかもしれません)を理解について説明します。参考:「モバイルオペレーティングシステムの原理と実践」オフ東勝、Androidの開発者ドキュメント:https://developer.android.google.cn/guide/components/activities/intro-activities?hl=zh_cn

イベントを作成します。

:アクティビティを作成するには、2つのステップが必要です
対応するActivityクラス(javaファイル)の(1)の準備を。
(2)は、AndroidManifest.xmlファイルに登録されています。
まず、ここでMainActivity.javaは、私たちはより良いアクティビティを作成役立っているファイルを開いて、アンドロイドStudioでプロジェクトを作成します。

package com.beihang.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
    }
}

:マニフェストファイルに登録する同じ時間が必要で宣言活動への最初の必要性アプリケーションの子要素として、:

<manifest ... >
      <application ... >
          <activity android:name=".ExampleActivity" />
          ...
      </application ... >
      ...
    </manifest >

ここでアンドロイド:名前は=「...」不可欠な要素、活動の名前があり、これは簡単に変更することはできませんです。必要に応じて、いくつかの他のプロパティを追加し、Androidの開発者向けドキュメントを知ることができます参照してください。
でも宣言インテントフィルタ(テントフィルタ)に続いて、インテントフィルタでAndroidが強力な機能ですが、それは、Androidのアクティビティのみを明示的に呼び出すことはできませんになり、暗黙的にも、例えば、開始することができます:あなたが言うことができますAndroidシステム、ジョブの完了を開始するための活動のいずれかを見つけることができますが、その活動を指定しないでください。

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>

子当初意図フィルタ要素は、子要素は、一般に、フィルタを照合することによってサブアクションおよびオプションのラベルカテゴリとサブラベルデータ、**(インテント)活性を受け入れるように意図されている合成文を含みますこの活動をコールする意向。3つのコードのタグを示す:情報活性を送信することができることを示すアクションタグ、カテゴリラベルの指示活性が起動要求を受信することができ、データタグを指定し、このデータのタイプ活性を送信することができます。具体的には、活動を開始する方法を意図により、後述します。
私たちは、活動を作成しましたし、マニフェストファイルに登録した後、あなたは活動に独自のロジックを実装することができます。

ライフサイクル活動

そのライフサイクルにおける活性は、複数の状態を通過します。あなたは状態間の遷移を処理するためのコールバックのシリーズを使用することができます。まず、周期活性ステートメントディッシングのブロック図:
ここに画像を挿入説明
本明細書AndroidAPI図を直接使用します。
最初の活動は、主に3つの状態です:ランニング、停止一時停止します対応関係である:動作状態は、このアクティビティの表示を強調するために、上部の前景活性が、この場合、アクティブ動作状態(onResume)において、フォーカスのアクティブ動作状態を得ることができたとされ、休止状態がときに他の活動前景にします;サスペンド状態(onPause)における活性は、集中できない場合、現在の活動は、依然として、可視なく淡色スタックのもう上部ない、リサイクル活動は、システムメモリの状態が低い中断されません停止活動がされなくなったときスタック、完全に他のイベントによって覆われ、停止される(onStop)見えない、その時点でアクティブなメンバ変数の値がまだ保存され、低い回収システムメモリです。
アクティブ動作状態へのonCreate()、ONSTART()とonResume()メソッドが呼び出される開始活性は、onPause()メソッドの活動の前に他の活動(スタックの最上部)が呼び出されたときにときにブロック図を見ることができる見ます、のonCreate()、ONSTART()と呼び出しとonResume()他のアプリケーションがメモリを必要とする場合、バック時間と活動に、プロセスを終了し、再度起動していない、休止のアクティブ状態に状態を実行するために、活性がもはや表示されているとき、そのonStop()メソッドが呼び出され、活動が停止したユーザーが(ウェイクonRestartとき、ホールト状態はまだ呼び出すことができます)再起動する方法、低システムメモリの時間でプロセスを強制終了。
違いは、Android携帯電話の戻るボタンとホームボタンをテストするために、次のコードを書くことができます。
注のonCreate()メソッドすなわち、このライフサイクル全体での活動は一度だけ実行するので、ここで書くためのいくつかの開始関連のロジックが必要されます

package com.beihang.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    public static final String TAG = "MainActivity";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate");
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart");
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume");
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause");
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy");
    }
    
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart");
    }
}

ここでは、あなたはLogcatでの活動をリアルタイムで動作ステータスを表示することができ、各コールバックメソッドの呼び出し活動の情報をプリントアウトします。実際の動作:アプリケーションの起動、印刷表示のonCreate()、ONSTART()とonResume()メソッドが呼び出され、ホームボタンを押して表示onPause()とonStop()メソッドが呼び出されるの内容を印刷するために、活動は停止します; [戻る]キーを押したときに、onPause()、onStop()とonDestroy()メソッドが呼び出されると、システムは活動を破壊しています。我々は明らかに異なるでコールバック音響活動のライフサイクルと状態切り替え方法が表示されます。私たちは、ライン上で適切なコールバックメソッドにおける当社のロジックを記述する必要があります。より具体的な活動やライフサイクルの詳細な内容は、公式ドキュメントを参照してください。

別のアクティビティの間の変換

ほとんどのプロジェクトは、私たちはさまざまな活動にジャンプする必要がある、唯一の活動ではありません。:2つの方法で別のアクティビティへの一つの活動:startActivity()やstartActivityForResult()は、両方の方法は、以下が導入された、インテントオブジェクトを渡す必要
(1)startActivity()
新しく立ち上げた活動結果を返す必要がない場合、現在の活動は、startActivity()メソッドを呼び出すことによって、それを起動することができます。

Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

ここでは、2番目のパラメータは、特定のコンストラクタコンポーネントのクラス名であり、このパラメータでの活動を開始する必要性を指定することができ、インテントオブジェクトを作成し、SignInActivityにジャンプすることが可能である直接渡さstartActivity()メソッド。コンテンツの背面にある意図は、1を書き込むための時間を持っています。
、SMSメールを送信、例えば、次のアクティビティ活動に、このデータの一部を渡すことが時には望ましいです。これは、データインテントオブジェクトの交換を介して達成されます。

Intent intent = new Intent(this, SignInActivity.class);
intent.putExtra("userId", txtUserid.getText().toString());
startActivity(intent);

意図キーを渡すputExtra()メソッドにより本明細書オブジェクト - 値のペア、およびそのデータがSignInActivityで活性化されることを意図し取得することができます。

Intent it = this.getIntent();
Bundle bundle = it.getExtras();
String userId = bundle.getString("userId");

(2)startActivityForResult()
時には、返される活動の結果の最後に活動から得ることになるでしょう。たとえば、ユーザーが連絡先リストで人物を選択することができ、活動を開始することができ、活動の終わりには、システムが人を選択するようにユーザーを返すとき。今度は、startActivityForResult(テントの意図、int型requestCode)メソッドを呼び出すことができます。最初のパラメータは、インテントオブジェクトstartActivity()メソッドは上記と同じであり、第2の整数のパラメータは、典型的には、(意図、INT)コールの同じstartActivityForResultアクティビティから複数回の間で明確にするために使用される要求を、符号化されます。また、(int型requestCode、int型のresultCode、onActivityResult上書きテント) 児童の活動の最後にコールバックするための方法を、このように送信される子どもたちの活動データを取得します。
イベントの最後にコールsetResult(int型のresultCode、その意図)する必要があるが、子供の活動のためです。例えば:

btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent it = new Intent(this, SuccessActivity.class);
                startActivityForResult(it, 123);
            }
        });
...
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent it) {
        if (requestCode == 123) {
            if (resultCode == 4) {
                Log.v(TAG, resultCode + "received");
            }
        }
    }

:setResult(int型のresultCode、テントこと)法と呼ばれる子での活動

btnback.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setResult(4, (new Intent()).putExtra("userId", userid));
                this.finish();
            }
        });

だから、その子が返す活動は、コールバックメソッドのonActivityResult()が呼び出されると、関連する操作を実行したとき。

概要

フィルムは、活動(活動)の簡単な説明に焦点を当て、およびその他の高度な使用方法の詳細は、Android開発者向けドキュメントを参照してください。記事は、創造の活動の間で異なる活動のライフサイクルをジャンプする二つの方法に分け。活動のAndroidプロジェクトは、より明確に、プログラムの実行を理解することができるの呼び出しを実行している把握する別のコールバックメソッドでは異なる状態で非常に重要な要素です。論文はまた、コンセプトの意図(意図)の数に関与し、かつ意図に記事を書くための時間を持つことになります。

リリース8元の記事 ウォンの賞賛3 ビュー2695

おすすめ

転載: blog.csdn.net/qq_41241926/article/details/104872988