Androidにおける通信メカニズムの概要

12244 ワード

1つ目は、handlerを使用して通信するhandlerです.プライマリ・スレッド(UIスレッド)のサブスレッドとして想像できます.プライマリ・スレッド(UIスレッド)にデータを送信してプライマリ・スレッド(UIスレッド)のUIと論理を更新することができます.handlerはサブスレッドなので、プライマリ・スレッドをブロックすることはありません.Androidの開発では,コードのどこかでプライマリスレッドが5秒以上ブロックされるとANR(システムプロンプト強制閉鎖)が提示されることが知られているので,時間のかかる操作ではサブスレッドを開いてANRを避けることが考えられる.handlerは、プライマリ・スレッドにメッセージを送信すると、プライマリ・スレッドのUIロジックの更新を待つなど、キュー形式で並べられます.
public class HandlerActivity extends Activity implements Runnable{  
  
    /**    **/  
    public final static int UPDATE_TIME =0;  
    /**      **/  
    public final static int UPDATE_COMPLETED =1;  
      
    /**         10     **/  
    private int mShowNumber = 0;  
      
    /**      **/  
    private Button mButton = null;  
      
    /**      **/  
    private TextView mTextView = null;  
     
    /**  **/  
    private Thread mThread = null;  
     
    /**       **/  
    private boolean mRunning = false;  
      
    Handler handler = new Handler() {  
    @Override  
    public void handleMessage(Message msg) {  
          
        Bundle bundle= msg.getData();  
        //  key          
        String  number = bundle.getString("number");  
        //msg.what handler          
        switch(msg.what) {  
        case UPDATE_TIME:  
        mTextView.setText("      " + number);  
        break;  
        case UPDATE_COMPLETED:  
        mTextView.setText("    ");  
        break;  
        }  
        super.handleMessage(msg);  
    }  
    };  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
    setContentView(R.layout.handler);  
      
    /**  button    TextView   **/  
    mButton = (Button)findViewById(R.id.button0);  
    mTextView = (TextView)findViewById(R.id.textView0);  
    mThread = new Thread(this);  
      
    mButton.setOnClickListener(new OnClickListener() {  
        @Override  
        public void onClick(View arg0) {  
        /**             **/  
        mRunning = true;  
        mThread.start();  
        }  
    });  
      
    mTextView.setText("          ");  
    super.onCreate(savedInstanceState);  
    }  
  
    public void ShowDialog(String string) {  
    AlertDialog.Builder builder = new AlertDialog.Builder(  
        HandlerActivity.this);  
    builder.setIcon(R.drawable.icon);  
    builder.setTitle(string);  
    builder.setPositiveButton("  ", new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {  
        finish();  
        }  
    });  
    builder.show();  
    }  
  
   
  
    @Override  
    public void run() {  
  
    while (mRunning) {  
        try {  
        mShowNumber++;  
        /**         bandle  **/  
        Bundle bandle = new Bundle();  
        bandle.putString("number", String.valueOf(mShowNumber));  
  
        /**                **/  
        /**  bandle  message  **/  
        /**      message     **/  
        /** mShowNumber  10            **/  
        Message msg = new Message();  
        if(mShowNumber <=10) {  
            msg.what = UPDATE_TIME;   
        }else {  
            mRunning = false;  
            msg.what = UPDATE_COMPLETED;    
        }  
        msg.setData(bandle);  
        handler.sendMessage(msg);  
        Thread.sleep(1000);  
        } catch (InterruptedException e) {  
        e.printStackTrace();  
        }  
    }  
    }  
}  

2.Notifation通知バー情報Notifation通知バーは、ユーザーが手動でNotifation通知バーを外さない限り、画面上でユーザーに情報を提示しますが、ユーザーが読んでいる内容は中断されません.Notifationの利点は、ユーザーが非常に重要な情報を読んでいるときにactivityを直接開くのを手伝うのは適切ではありません.その時の操作行為に直接影響したので、Notifationが出てきました.開発中にユーザーの使用を中断する可能性がある場合は、Notifation通知欄を使用することをお勧めします.
public class NotificationActivity extends Activity {  
    NotificationManager mManager = null;  
    Notification notification =null;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
    setContentView(R.layout.notification);  
  
    //             ,     Notification            
    mManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);  
    //   Notification                                  
    notification = new Notification(R.drawable.jay,  
        "Android     ", System.currentTimeMillis());  
      
    //           Notification      
    notification.flags = Notification.FLAG_AUTO_CANCEL;  
      
    //         activity  
    Intent intent = new Intent(this, MyShowActivity.class);  
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_NEW_TASK);  
  
    //  bundle                       
    Bundle bundle = new Bundle();  
    bundle.putString("name", " Notification     ");  
    intent.putExtras(bundle);  
      
    //             
    PendingIntent contentIntent = PendingIntent.getActivity(this,  
        R.string.app_name, intent, PendingIntent.FLAG_UPDATE_CURRENT);  
    notification.setLatestEventInfo(this, "Android     ",  
        "QQ   164257885", contentIntent);  
      
  
    Button button0 = (Button)findViewById(R.id.button0);  
    button0.setOnClickListener(new OnClickListener() {  
          
        @Override  
        public void onClick(View arg0) {  
        //    Notification    
        mManager.notify(0, notification);  
        }  
    });  
      
    Button button1 = (Button)findViewById(R.id.button1);  
    button1.setOnClickListener(new OnClickListener() {  
          
        @Override  
        public void onClick(View arg0) {  
        //    Notification    
        mManager.cancelAll();  
        }  
    });  
      
    super.onCreate(savedInstanceState);  
    }  
  
}  

3.放送の送信と受信Android開発では、まったく関係のない2つのプログラム間の通信が必要であれば、放送の送信と受信のメカニズムを用いて実現することができ、例えばプログラムAが1つの放送プログラムBを送信して何かを受信すると、互いに通信することができる.
public class BroadcastActivity extends Activity {  
  
  
     
    Button mButton0 = null;  
    Button mButton1 = null;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
    setContentView(R.layout.broadcast);  
      
    mButton0 = (Button)findViewById(R.id.button0);  
    mButton0.setOnClickListener(new OnClickListener() {  
          
        @Override  
        public void onClick(View arg0) {  
                Intent intent = new Intent(MyService.SEND_OK_MESSAGE);  
                intent.putExtra("name", "    OK     ");  
                sendBroadcast(intent);  
        }  
    });  
  
    mButton1 = (Button)findViewById(R.id.button1);  
    mButton1.setOnClickListener(new OnClickListener() {  
          
        @Override  
        public void onClick(View arg0) {  
                Intent intent = new Intent(MyService.SEND_CANCLE_MESSAGE);  
                intent.putExtra("name", "    Cancle     ");  
                sendBroadcast(intent);  
        }  
    });  
      
    //  Service   
    Intent i = new Intent(this, MyService.class);  
    startService(i);  
    super.onCreate(savedInstanceState);  
    }  
}  
             service  service   BroadcastReceiver                    onStart()       AndroidManifest.xml               、

view plain
  
      
          
      
      
          
          
      
  


 onStart()               

view plain
public class MyService extends Service {  
  
    public final static String SEND_OK_MESSAGE = "send.ok.message";  
    public final static String SEND_CANCLE_MESSAGE = "send.cancle.message";  
      
    private BroadcastReceiver myBroadCast = new BroadcastReceiver() {  
  
    @Override  
    public void onReceive(Context context, Intent intent) {  
        String action = intent.getAction();  
        if (action.equals(SEND_OK_MESSAGE)) {  
        Toast.makeText(context, "         " + SEND_OK_MESSAGE, Toast.LENGTH_LONG).show();  
        }else if(action.equals(SEND_CANCLE_MESSAGE)) {  
        Toast.makeText(context, "         " + SEND_CANCLE_MESSAGE, Toast.LENGTH_LONG).show();  
        }  
    }  
  
    };  
  
    @Override  
    public void onCreate() {  
    super.onCreate();  
    }  
  
    @Override  
    public void onStart(Intent intent, int startId) {  
    //         
    IntentFilter myFilter = new IntentFilter();  
    myFilter.addAction(SEND_OK_MESSAGE);  
    myFilter.addAction(SEND_CANCLE_MESSAGE);  
    this.registerReceiver(myBroadCast, myFilter);  
        super.onStart(intent, startId);  
    }  
    @Override  
    public IBinder onBind(Intent arg0) {  
    return null;  
    }  
  
}  

               service                              service    ,    service    activity                      ,     service                    scrvice                 activity       scrvice                 scrvice  ,         

 AndroidManifest.xml                                                         

view plain
  
        
           
       
     

       

view plain
  

 BroadcastRecevier             service          service。

view plain
public class MyBootReceiver extends BroadcastReceiver {  
   /**    **/  
    static final String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";  
  
    @Override  
    public void onReceive(Context context, Intent intent) {  
    /**          service**/  
    if (intent.getAction().equals(BOOT_COMPLETED)) {  
        Intent i = new Intent(context, MyService.class);  
        context.startService(i);  
    }  
  
    }  
}  

4.ActivityとActivityの間のジャンプはソフトウェアアプリケーションの開発において必ず複数のActivityがあります.そうすると、それらの間には相互ジャンプの関係があります.ジャンプの実現方法はIntentを使ってstartActivityを使うか、もちろんジャンプすればデータを持って行くことができます.例えば、AからBにジャンプすると、Aのデータの一部をIntentを通じてBに渡すことができます.
             intent bandle                      ?                   ,          Intent              bundle           bundle        。              3 activity  A.B.C     A     B     C ,    intent          A         B   B                     C              bundle   B     bundler   C                  C          。

  
view plain
       /**Activity     **/  
       Button botton3 = (Button)findViewById(R.id.button3);  
       botton3.setOnClickListener(new OnClickListener() {  
      
    @Override  
    public void onClick(View arg0) {  
     Intent intent = new Intent(mContext,ShowActivity.class);   
     //  intent.putExtra()      
     intent.putExtra("name", "  MOMO");  
     intent.putExtra("age", 25);  
     intent.putExtra("boy", true);  
      
     //     bundle       bundle  intent.putExtra()    
     Bundle bundle = new Bundle();  
     bundle.putString("b_name", "   ");  
     bundle.putInt("b_age", 23);  
     bundle.putBoolean("b_boy", false);  
     //      bundle   intent   
     intent.putExtras(bundle);  
     //       activity  intent      
     startActivity(intent);  
    }  
});     

  
view plain
public class ShowActivity extends Activity {  
      
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
    setContentView(R.layout.my);  
      
    Intent intent = getIntent();  
      
    String name = intent.getStringExtra("name");  
    //                 intent        
    //       
    int age  = intent.getIntExtra("age", 0);  
    boolean isboy = intent.getBooleanExtra("boy", false);  
    TextView textView0 = (TextView)findViewById(R.id.text0);  
      
    textView0.setText("    " + name + "   " + age + "  ?  " + isboy);  
      
      
    Bundle bundle = intent.getExtras();  
    name = bundle.getString("b_name");  
    //                 bundle        
    //       
    age = bundle.getInt("b_age",0);  
    isboy = bundle.getBoolean("b_boy", false);  
      
    TextView textView1 = (TextView)findViewById(R.id.text1);  
      
    textView1.setText("    " + name + "   " + age + "  ?  " + isboy);  
      
    super.onCreate(savedInstanceState);  
    }  
  
}