Androidアプリケーション開発の基礎その6:ページジャンプとデータ転送

5818 ワード

2番目のActivityの作成
  • インベントリファイルにactivityタグ
  • を構成する必要がある.
  • ラベルにこのサブノードがある場合、システムにショートカットアイコン
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
    
  • が複数作成されます.
  • アプリケーションは、デスクトップに複数のショートカットアイコンを作成できます.
  • activityの名前、アイコンとアプリケーションの名前、アイコンが異なる
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    
  • .
    Activityのジャンプ
    ActivityのジャンプにはIntentオブジェクトを作成する必要があります.intentオブジェクトのパラメータを設定してActivityをジャンプするように指定します.
    Activityのパッケージ名とクラス名を設定することで、明示的な意図と呼ばれるジャンプを実現
    指定された動作でジャンプを実現することを暗黙的意図と呼ぶ
    明示的な意図.
  • 同じ項目の下の別のActivityにジャンプし、そのActivityのバイトコードを直接指定すれば
    Intent intent = new Intent();
    intent.setClass(this, SecondActivity.class);
    startActivity(intent);
    
  • になります.
  • 他のアプリケーションのActivityにジャンプするには、アプリケーションのパッケージ名とActivityのクラス名
    Intent intent = new Intent();
    //            
    intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
    startActivity(intent);
    
  • を指定する必要があります.
    暗黙的意図.
  • 暗黙的に指定Activity
    Intent intent = new Intent();
    //            
    intent.setAction(Intent.ACTION_DIAL);
    startActivity(intent);
    
  • にジャンプする.
  • Activityを暗黙的に起動するには、インベントリファイルのactivityノードにintent-filterサブノード
    <intent-filter >
        <action android:name="com.itheima.second"/>
        <data android:scheme="asd" android:mimeType="aa/bb"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    
    を設定する必要があります.
  • action指定アクション(カスタマイズ可能、システム付属)
  • data指定データ(操作内容)
  • categoryカテゴリ(デフォルトカテゴリ、トップボックス、車載パソコン)
  • 暗黙的にActivityを起動することを意図しており、intentに上記の3つの属性を設定する必要があり、その値は、リストファイル内の3つの属性の定義と一致する必要がある
  • .
  • intent-filterノードとそのサブノードは同時に複数定義ことができ、暗黙的な起動時にいずれかと一致するだけで
  • が可能である.
    setDataで渡されたデータの取得
        //     Activity intent  
        Intent intent = getIntent();
        Uri uri = intent.getData();
    

    明示的意図と暗黙的意図の適用シーン
  • 同じアプリケーションでActivity
  • を起動するために明示的に意図する.
  • 異なるアプリケーションでActivityを起動するための暗黙的な意図
  • システムに複数のActivityのintent-filterが同時にあなたのintentと一致している場合、システムはダイアログボックスを表示し、すべての一致するActivityをリストし、ユーザーがどの
  • を起動するかを選択します.

    Activityジャンプ時のデータ転送
  • ActivityがIntentを介して起動する場合、Intentオブジェクトを介してターゲットActivity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("maleName", maleName);
    intent.putExtra("femaleName", femaleName);
    startActivity(intent);
    
  • にデータを携帯することができる.
  • ターゲットActivityからデータを取り出す
    Intent intent = getIntent();
    String maleName = intent.getStringExtra("maleName");
    String femaleName = intent.getStringExtra("femaleName");
    
  • .
    Activityライフサイクル
    void onCreate()
  • Activityは作成済み
  • void onStart()
  • Activityは既に画面に表示されているが、フォーカス
  • は得られていない.
    void onResume()
  • Activityはフォーカスを得る、ユーザーと対話できる
  • .
    void onPause()
  • Activityはフォーカスを失い、ユーザーと対話できなくなったが、
  • が依然として見られる.
    void onStop()
  • Activityは見えず、バックグラウンド
  • に入る
    void onDestroy()
  • Activityが破棄された
  • void onRestart()
  • Activityが非表示から可視になったときに実行する方法
  • .
    シーンの操作
  • Activity作成時にリソースを初期化する必要があり、破棄時にリソースを解放する必要がある.あるいはプレーヤーアプリケーションは、インタフェースがバックグラウンドに入るときに
  • を自動的に一時停止する必要がある.
    完全ライフサイクル(entire lifetime)
    onCreate-->onStart-->onResume-->onPause-->onStop-->onDestory
    ビジュアルライフサイクル(visible lifetime)
    onStart-->onResume-->onPause-->onStop
    フロントライフサイクル(foreground lifetime)
    onResume-->onPause
    Activityの4種類の起動モード
    各アプリケーションにはActivityタスクスタックがあり、起動したActivityを格納します.
    Activityの起動モード、タスクスタックの配置を変更する
  • standard標準起動モード
  • singleTop単一トップモード
  • タスクスタックのスタックトップにこの開くactivityがある場合、activityは再作成されず、既存のactivityが多重化されます.スタックトップが存在する場合、重複して作成されないことを保証します.
  • アプリケーションシーン:ブラウザのブックマーク
  • singeTask単一タスクスタックは、現在のタスクスタックに1つのインスタンスしか存在しません.
  • activityをオンにすると、タスクスタックにインスタンスがすでに存在するかどうかをチェックし、インスタンスが存在する場合は既存のactivityを多重化し、このactivityの上のすべての他のactivityをクリアし、既存のactivityを多重化します.タスクスタック全体に
  • のインスタンスが1つしか存在しないことを保証します.
  • アプリケーションシーン:ブラウザのactivity
  • activityの作成に多くのシステムリソース(cpu、メモリ)を必要とする場合、このactivityはsingletaskの起動モードとして一般的に構成されます.Webkitカーネルcコード
  • singleInstance起動モードは非常に特殊で、activityは自分のタスクスタックで実行され、このタスクスタックには1つのインスタンスしか存在しません.
  • 携帯電話のオペレーティングシステム全体にactivityが1つしか存在しないことを保証するにはsingleInstance
  • を使用します.
  • アプリケーションシーン:電話ダイヤルインタフェース

  • 縦横画面切り替えのライフサイクル
    デフォルトでは、縦画面切り替え、現在のactivityを破棄し、新しいactivityを再作成します.
    ショートカットキーctrl+F 11
    ゲームなどの特殊なアプリケーションでは、縦画面切り替えactivityを破棄して再作成する必要はありません.縦画面切り替えのライフサイクルを無効にします.縦横の画面にandroid:screenOrientation="landscape"android:screenOrientation="portrait"と書く
  • は、システムの環境に敏感な縦画面の切り替えを行わないようにします.
     android:configChanges="orientation|screenSize|keyboardHidden"
    

  • Activityをオンにして戻り値を取得する
    AインタフェースからBインタフェースを開き、Bインタフェースが閉じたときに、Aインタフェースにデータを返します.
    手順:1.Activityをオンにして戻り値を取得
        startActivityForResult(intent, 0);
    
  • 新しくオープンしたインタフェースの中でデータを設定するロジック
    Intent data = new Intent();
    data.putExtra("phone", phone);
    //        ,         
    setResult(0, data);
    finish();//      activity,      
    
  • を実現する.
  • オープン者activityでの実装方法onActivity Result(int requestCode,int resultCode,Intent data)は、dataによって返されるデータ
  • を取得する.
  • は、要求コードおよび結果コードに基づいてトラフィックロジック
  • を決定する.