Android アクティビティの使用方法

アクティビティ

アクティビティは、番号のダイヤル、写真の撮影、電子メールの送信、地図の表示など、特定のタスクを完了するためにユーザーが操作できる画面を提供するアプリケーション コンポーネントです。各アクティビティには、ユーザー インターフェイスを描画できるウィンドウが与えられます。通常、ウィンドウは画面いっぱいに表示されますが、画面よりも小さくなり、他のウィンドウの上に浮くこともあります。

アプリケーションは通常、疎結合された複数のアクティビティで構成されます。通常、アプリケーション内のアクティビティは、アプリケーションが最初に起動されたときにユーザーに提示される「メイン」アクティビティとして指定されます。その後、各アクティビティは別のアクティビティを開始して、さまざまなアクションを実行できます。アクティビティが開始されるたびに、前のアクティビティは停止されますが、システムはアクティビティをスタック (「バック スタック」) に保持します。新しいアクティビティが開始されると、スタックの一番上にプッシュされ、ユーザー フォーカスを取得します。バック スタックは単純な「後入れ先出し」の原則に従っているため、ユーザーが現在のアクティビティを終了して [戻る] ボタンをクリックすると、スタックから取り出され (そして破棄され)、前のアクティビティが再開されます。

新しいアクティビティが開始されたためにアクティビティが停止すると、アクティビティのライフサイクル コールバックを通じてこの状態遷移が通知されます。システムがアクティビティを作成したか、停止したか、再開したか、破棄したかにかかわらず、アクティビティが自身の状態変化の結果として受け取る可能性のあるコールバックは多数あり、各コールバックは、その状態に適した指定された作業を実行する機会を提供します。 . たとえば、アクティビティを停止すると、ネットワーク データベース接続などの大きなオブジェクトをすべて解放する必要があります。アクティビティが再開すると、必要なリソースを取り戻し、中断されたアクションを再開できます。これらの状態遷移はすべて、アクティビティのライフ サイクルの一部です。

アクティビティの作成

アクティビティを作成するには、Activity のサブクラス (または Activity のサブクラスのサブクラス) を作成する必要があります。サブクラスでは、アクティビティの作成、停止、再開、破棄など、ライフサイクルのさまざまな状態間でアクティビティが遷移するときに、システム コールバックのコールバック メソッドを実装する必要があります。最も重要なコールバック メソッドは次の 2 つです。

[onCreate()](https://www.cnblogs.com/tekkaman/archive/2011/06/07/2074211.html)

このメソッドを実装する必要があります。アクティビティを作成するときに、システムによって呼び出されます。実装では、アクティビティの基本コンポーネントを初期化する必要があります。さらに重要なことに、ここで setContentView() を呼び出して、アクティビティ ユーザー インターフェイスを定義する必要があります。

[onPause()](https://www.cnblogs.com/tekkaman/archive/2011/06/07/2074211.html)

ユーザーがアクティビティを離れると、システムはこのメソッドを呼び出します (ただし、常にアクティビティが破棄されるとは限りません)。これは通常、ユーザー セッションを超えて存在する変更をコミットする必要がある場所です (ユーザーが戻ってこない可能性があるため)。

スムーズなユーザー エクスペリエンスを提供するために使用する必要があるライフサイクル コールバックは他にも多数あります。テーブル操作が中止されると、アクティビティが中断されたり、破棄されたりする可能性があります。

1、ユーザーインターフェースの実装

アクティビティのユーザー インターフェイスは、ビュー (View クラスから継承されるオブジェクト) の階層によって提供されます。各ビューは、アクティビティ ウィンドウの特定の長方形の領域を制御し、ユーザーの操作に応答します。たとえば、ビューは、ユーザーがタッチしたときにアクションを開始するボタンである場合があります。

Android には、レイアウトの設計と構成に使用できる定義済みのビューが多数用意されています。「ウィジェット」は、ボタン、ファイル フィールド、チェックボックス、または単なる画像など、画面に視覚的な (およびインタラクティブな) 要素を提供するビューです。"Layouts" は、ViewGroup から継承された View であり、スレッド レイアウト、グリッド レイアウト、依存関係レイアウトなどのサブビューに特別なレイアウト モデルを提供します。View および ViewGroup クラス (または既存のサブクラス) をサブクラス化して、独自のウィジェットとオブジェクトを作成し、それらをアクティビティ レイアウトに適用できます。

最も一般的な方法は、ビューとアプリケーション リソースに格納されている XML レイアウト ファイルを使用してレイアウトを定義することです。このようにして、アクティビティの動作を定義するコードとは別に、ユーザー インターフェイスの設計を維持できます。setContentView() を使用してレイアウトを UI として設定し、リソース レイアウトのリソース ID を渡すことができます。ただし、アクティビティ コードで新しいビューを作成し、新しいビューを ViewGroup に挿入してビュー階層を作成し、ルート ViewGroup を setContentView() に渡すことでそのレイアウトを使用することもできます。

マニフェストでアクティビティを宣言する

システムからアクセスできるようにするには、マニフェスト ファイルでアクティビティを宣言する必要があります。アクティビティを宣言するには、マニフェスト ファイルを開き、要素の子として要素を追加します。例えば:

インテントフィルターの使い方

要素は、要素を使用してさまざまなインテント フィルターを指定して、他のアプリケーションがそれをアクティブ化できることを宣言することもできます。

Android SDK ツールを使用して新しいアプリケーションを作成すると、アクティビティが「メイン」アクションに応答し、「ランチャー」カテゴリに配置する必要があることを宣言するインテント フィルタを含むスタブ アクティビティが自動的に作成されます。インテントフィルターはこんな感じ。

これがこのアプリケーションへの「メイン」エントリ ポイントであることを指定する要素。要素は、このアクティビティをシステム アプリケーションのリストに含める必要があることを指定します (ユーザーがこのアクティビティを開始できるようにするため)。

アプリケーションを自己完結型にし、他のアプリケーションがそのアクティビティをアクティブにしないようにする場合は、他のインテント フィルターは必要ありません。前の例のように、1 つのアクティビティのみが「メイン」アクションと「ランチャー」カテゴリを持つ必要があります。他のアプリケーションからアクセスされたくないアクティビティにはインテント フィルターを設定しないでください。インテント自体を表示することでアクティビティを開始できます。

ただし、アクティビティが他のアプリケーション (および独自のアプリケーション) から含まれるインテントに応答するようにする場合は、このアクティビティに追加のインテント フィルターを定義する必要があります。応答したいインテントのタイプごとに、要素を含める必要があります。必要に応じて、要素および/または要素を含める必要があります。これらの要素は、アクティビティが応答できるインテントのタイプを指定します。

活動開始

startActivity() を使用して別のアクティビティを開始し、開始したいアクティビティを説明する Intent を渡すことができます。インテントは、開始したい準備済みアクティビティを指定するか、達成したいアクションを記述します (オペレーティング システムが適切なアクティビティを選択し、別のアプリケーションをカスタマイズする可能性があります)。インテントは、開始されたアクティビティで使用される少量のデータを転送できます。

アプリケーション内で完全に作業していると、多くの場合、未知のアクティビティを単純に開始する必要があります。これを行うには、クラス名を使用して、開始するアクティビティを明示的に定義するインテントを作成します。たとえば、アクティビティが SignInActivity という名前の別のアクティビティを開始する方法を次に示します。

ただし、アプリケーションは、アクティビティからのデータを使用して、電子メール、ファイル メッセージ、またはステータスの更新の送信などのアクションを実行する必要がある場合があります。この場合、アプリケーションにはこのアクションを実行するための独自のアクティビティがない可能性があるため、デバイス上の別のアプリケーションによって提供されるアクティビティにアクションを実行するように求めることができます。ここでインテントが非常に役立ちます。実行したいアクションを記述するインテントを作成すると、システムが別のアプリケーションから適切なアクティビティを開始します。このインテントを処理できるアクティビティが複数ある場合、ユーザーは実行するアクティビティを選択できます。たとえば、ユーザーが電子メールを送信できるようにする場合は、次のインテントを作成できます。

EXTRA_EMAIL は、電子メール アドレスを指定する文字列の配列をインテントに追加します。メール アプリケーションがこのインテントに応答すると、文字列の配列を読み取り、対応するフィールドに配置します。この場合、電子メール アプリケーションのアクティビティが開始され、ユーザーが完了すると、アクティビティが再開されます。

結果を求めて活動開始

開始したアクティビティの結果を受け取りたい場合があります。この場合、(startActivity() の代わりに) startActivityForResult() でアクティビティを開始します。次に、後続のアクティビティから結果を受け取り、onActiviryResult() コールバック関数を実装します。後続のアクティビティが完了すると、インテントを介して onActivityResult() 関数に結果が返されます。

たとえば、ユーザーに連絡先の 1 つを選択してもらい、アクティビティでその連絡先に対して何かを実行できるようにすることができます。このようなインテントとアクションの結果を作成する方法は次のとおりです。

この例は、アクティビティの結果を操作するために onActivityResult() 関数で使用する必要がある基本的なロジックを示しています。最初の条件は、リクエストが成功したかどうかをチェックします -- 成功した場合、resultCode は RESULT_OK になります -- そして、リクエストがレスポンスであったかどうかがわかります -- この場合、requestCode は startActivityForResult() パラメータを持つ 2 番目のパラメータと一致します. そこで、コードは、インテントで返されたデータ (データ パラメーター) をクエリすることによって、アクティビティの結果を操作します。

ContentResolver 実装がコンテンツ プロバイダーにクエリを実行し、クエリされたデータの読み取りを許可する Cursor を返すということが起こります。

アクティビティのシャットダウン

独自の finish() メソッドを呼び出すことで、アクティビティを閉じることができます。finiActivity() を使用して、以前に開始した別のアクティビティを閉じることもできます。

: ほとんどの場合、これらのメソッドを使用したアクティビティの結果は表示しないでください。アクティビティのライフサイクルについて以下で説明するように、アクティビティのライフサイクルは Android システムによって管理されるため、独自のアクティビティを作成する必要はありません。これらの関数を呼び出すことは、ユーザー エクスペリエンスに悪影響を及ぼします。ユーザーがアクティビティに戻ることを絶対に望まない場合に限ります。

おすすめ

転載: blog.csdn.net/Eqiqi/article/details/129735804