Androidノート-ブロードキャストとサービス2

6938 ワード

サービスの2つの起動方式(把握)

  • startService
  • サービスを開始すると、プロセスはサービスプロセス
  • になる.
  • サービスを開始したactivityとサービスにはもう一銭の関係はありません
  • bindService
  • バインドサービスは、プロセスをサービスプロセス
  • に変えることはありません.
  • バインドサービスは、activityがサービスと接続を確立し、activityが破棄するとサービスも破棄されるが、サービスが破棄されるとactivityは破棄されない
  • バインド・サービスおよびバインド・サービスのライフサイクル方法:onCreate->onBind->onUnbind->onDestroy
  • 指導者を探して証明書を発行する

  • サービスをリーダーと見なし、サービスにはbanZhengメソッドがあり、どのようにアクセスできますか?
  • サービスをバインドすると、サービスのonBindメソッドがトリガーされます.このメソッドは、MainActivityにIbinderのオブジェクトを返し、このオブジェクトを介してサービス内のメソッド
  • にアクセスします.
  • バインドサービス
      Intent intent = new Intent(this, BanZhengService.class);
      bindService(intent, conn, BIND_AUTO_CREATE);
    
  • サービスをバインドする際に、サービス接続実装クラスのオブジェクト
  • を転送する必要がある
  • この実装クラス
      class MyServiceconn implements ServiceConnection{
      @Override
      public void onServiceConnected(ComponentName name, IBinder service) {
          zjr = (PublicBusiness) service;
      }
      @Override
      public void onServiceDisconnected(ComponentName name) {    
      }
    
    }
  • を定義する
  • インプリメンテーションクラスオブジェクト
       conn = new MyServiceconn();
    
  • を作成する.
  • サービスでクラス実装Ibinderインタフェースを定義し、onBindメソッドで
      class ZhongJianRen extends Binder implements PublicBusiness{
      public void QianXian(){
          // banZheng 
          BanZheng();
      }    
      public void daMaJiang(){
          
      }
    
    }
  • を返す.
  • QianXianメソッドをインタフェースPublicBusiness定義
  • に抽出

    2つの起動方法を混合して使用する(把握する)

  • がサービスで音楽再生を実現する場合、音楽再生はサービスプロセス中に実行する必要があるが、音楽サービスにおける方法は、フロントActivityに呼び出される必要があるため、音楽サービス
  • を混在起動する必要がある.
  • 先start,再bind,破棄時先unbind,stop
  • サービスを使用してブロードキャスト受信者を登録する(把握)

  • Androidの4つのコンポーネントは、リストファイルに
  • を登録する必要があります.
  • ブロードキャスト受信者は、インベントリファイルを使用して登録することができる
  • アプリケーションが配備すると、ブロードキャスト受信者は、ユーザが手動でアプリケーションを停止するか、アプリケーションが削除されるまで有効になる.
  • ブロードキャスト受信者は、コードを使用して登録することができる
  • 放送受信者の実行が必要な場合は、コード登録を使用する、不要な場合は、コード登録解除
  • を使用することができる.
  • 電気量変更、スクリーンスイッチは、コード登録
  • を使用する必要があります.
  • 登録放送受信者
      // 
      receiver = new ScreenOnOffReceiver();
      // IntentFilter 
      IntentFilter filter = new IntentFilter();
      filter.addAction(Intent.ACTION_SCREEN_OFF);
      filter.addAction(Intent.ACTION_SCREEN_ON);
      
      // 
      registerReceiver(receiver, filter);
    
  • 登録解除放送受信者
      unregisterReceiver(receiver);
    
  • 登録解除後、放送受信者は機能を失う
  • .

    ≪ローカル・サービス|Local Services|emdw≫:サービスと起動コンポーネントが同じプロセスにあります。


    リモート・サービス:サービスと起動コンポーネントが同じプロセスではありません

  • リモート・サービスは暗黙的にしか起動できません.暗黙的にActivityを起動するように、リスト・ファイルでServiceラベルを構成する場合はintent-filterサブノードを構成し、actionサブノード
  • を指定する必要があります.

    AIDL(把握)

  • Android interface definition language
  • アンドロイドインタフェース定義言語
  • の役割:プロセス間通信
  • アプリケーションシーン:リモートサービスにおける仲介者オブジェクト、その他のアプリケーションは入手できないが、バインドサービスにより仲介者オブジェクトを取得する場合、強制的に変換することができず、aidlを使用すると、他のアプリケーションで仲介者が実現するインタフェース
  • を入手することができる.

    アリペイリモートサービス

  • はアリペイのサービスを定義し、サービスでpayメソッド
  • を定義する.
  • 仲介者オブジェクトを定義しpayメソッドをインタフェース
  • に抽出する.
  • 抽出インタフェース接尾辞名をaidl
  • に変更
  • 仲介者オブジェクト直接継承Stubオブジェクト
  • このアリペイサービスを登録し、intent-Filter
  • を定義します.

    支払いが必要なアプリケーション

  • 先ほど定義したaidlファイルをコピーします.aidlファイルが存在するパケット名は、元のパケット名と一致する必要があります.
  • リモートバインディングアリペイのサービスは、onServiceConnectedメソッドで仲介者オブジェクト
  • を入手できます.
  • 仲介者オブジェクトをStubを通過する.asInterfaceメソッドはpayメソッドを定義するインタフェース
  • に強く移行する.
  • 仲介者を呼び出すpayメソッド
  • 5つのフロントプロセス(把握)

  • activityはonresume法を実行し、焦点
  • を得る.
  • は、ユーザと対話中のactivityにバインドされたサービス
  • を有する.
  • は、startForeground()メソッド
  • を実行するサービスを有する.
  • は、onCreate()、onStart()またはonDestroy()メソッドのいずれかを実行しているサービス
  • を有する.
  • は、onReceiveメソッドを実行するブロードキャスト受信者
  • を有する.

    2つの可視プロセス(把握)

  • activityはonPauseメソッドを実行し、フォーカスを失いましたが、
  • が表示されます.
  • は、可視またはフロントactivityにバインドされたサービス
  • を有する.

    ダイアログ


    OKキャンセルダイアログボックス(把握)

  • ダイアログボックスビルダーオブジェクトを作成します.ファクトリモード
  • と似ています.
  •   AlertDialog.Builder builder = new Builder(this);
    
  • タイトルと本文
  • を設定
  •   builder.setTitle(" ");
      builder.setMessage(" , ");
    
  • 確定キャンセルボタン
      builder.setPositiveButton(" ", new OnClickListener() {
          
          @Override
          public void onClick(DialogInterface dialog, int which) {
              // TODO Auto-generated method stub
              Toast.makeText(MainActivity.this, " , ", 0).show();
          }
      });
      
      builder.setNegativeButton(" ", new OnClickListener() {
          
          @Override
          public void onClick(DialogInterface dialog, int which) {
              // TODO Auto-generated method stub
              Toast.makeText(MainActivity.this, " , ", 0).show();
          }
      });
    
  • を設定する.
  • ビルダーを使用してダイアログオブジェクト
      AlertDialog ad = builder.create();
      ad.show();
    
  • を作成する.

    ラジオダイアログ(熟知)

        AlertDialog.Builder builder = new Builder(this);
        builder.setTitle(" ");
    
  • ラジオ・オプションの定義
  •   final String[] items = new String[]{
              " ", " ", " "
      };
      //-1 
      // 
      builder.setSingleChoiceItems(items, -1, new OnClickListener() {
          
          //which 
          @Override
          public void onClick(DialogInterface dialog, int which) {
              Toast.makeText(MainActivity.this, " " + items[which], 0).show();
              // 
              dialog.dismiss();
          }
      });
      
      builder.show();
    

  • [複数選択](Multiple Selection)ダイアログボックス(詳細)

        AlertDialog.Builder builder = new Builder(this);
        builder.setTitle(" ");
    
  • は、複数選択可能なオプションを定義します.複数選択可能なため、
  • が選択されたオプションを記録するためにboolean配列が必要です.
  •   final String[] items = new String[]{
              " ",
              " ",
              " ",
              " "
      };
      //true 
      final boolean[] checkedItems = new boolean[]{
              true,
              false,
              false,
              false,
      };
      builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
    
          // , , isChecked true
          @Override
          public void onClick(DialogInterface dialog, int which, boolean isChecked) {
              checkedItems[which] = isChecked;
          }
      });
      
      builder.setPositiveButton(" ", new OnClickListener() {
          
          @Override
          public void onClick(DialogInterface dialog, int which) {
              StringBuffer sb = new StringBuffer();
              for(int i = 0;i < items.length; i++){
                  sb.append(checkedItems[i] ? items[i] + " " : "");
              }
              Toast.makeText(MainActivity.this, sb.toString(), 0).show();
          }
      });
      builder.show();
    

  • 国際化(把握)


    スタイルとトピック(熟知)

  • スタイルはトピック定義と同様
  • スタイルレイアウトファイルのコンポーネント
  • トピックActivity