Android软件开发之应用程序之间的通信介绍

Android 开发中在程序之间通讯的接口做的还是非常丰富的 本例主要向大家介绍程序之间是如何进行沟通,有哪几种沟通方式 如何来实现沟通。

1.使用handler传递消息

handler 大家可以把它想象成主线程(UI线程)的一个子线程,它可以给主线程(UI线程)发送数据从而更新主线程(UI线程)的UI与逻辑,handler 是一个子线程所以它的耗时操作不会阻塞主线程,大家都知道在android的开发中如果代码中某个地方阻塞主线程超过5秒的话系统会提示ANR (系统提示强制关闭)所以在耗时操作上我们可以考虑开启一个子线程避免ANR。  handler会向主线程发送消息 会以队列的形式排列着配合等待主线程更新UI 逻辑 等等。


下面这个例子诠释了这一点 利用handler传递消息来更新主线程的UI显示内容 点击按钮后每过一秒通过handler发送消息更新UI线程显示的时间 直到显示时间更新到10 然后结束这个线程。




Android软件开发之应用程序之间的通信介绍

 
  1. public class HandlerActivity extends Activity implements Runnable{  
  2.   
  3.     /**更新时间**/  
  4.     public final static int UPDATE_TIME =0;  
  5.     /**更新时间成功**/  
  6.     public final static int UPDATE_COMPLETED =1;  
  7.       
  8.     /**记录显示时间 超过10秒结束线程**/  
  9.     private int mShowNumber = 0;  
  10.       
  11.     /**开始计时按钮**/  
  12.     private Button mButton = null;  
  13.       
  14.     /**计时显示内容**/  
  15.     private TextView mTextView = null;  
  16.      
  17.     /**线程**/  
  18.     private Thread mThread = null;  
  19.      
  20.     /**线程关闭的标志**/  
  21.     private boolean mRunning = false;  
  22.       
  23.     Handler handler = new Handler() {  
  24.     @Override  
  25.     public void handleMessage(Message msg) {  
  26.           
  27.         Bundle bundle= msg.getData();  
  28.         //通过key的名称拿到它的值   
  29.         String  number = bundle.getString("number");  
  30.         //msg.what为handler接收到的消息编号   
  31.         switch(msg.what) {  
  32.         case UPDATE_TIME:  
  33.         mTextView.setText("正在更新时间" + number);  
  34.         break;  
  35.         case UPDATE_COMPLETED:  
  36.         mTextView.setText("更新完毕");  
  37.         break;  
  38.         }  
  39.         super.handleMessage(msg);  
  40.     }  
  41.     };  
  42.   
  43.     @Override  
  44.     protected void onCreate(Bundle savedInstanceState) {  
  45.     setContentView(R.layout.handler);  
  46.       
  47.     /**拿到button 与  TextView 对象**/  
  48.     mButton = (Button)findViewById(R.id.button0);  
  49.     mTextView = (TextView)findViewById(R.id.textView0);  
  50.     mThread = new Thread(this);  
  51.       
  52.     mButton.setOnClickListener(new OnClickListener() {  
  53.         @Override  
  54.         public void onClick(View arg0) {  
  55.         /**点击按钮后开始线程开始计时**/  
  56.         mRunning = true;  
  57.         mThread.start();  
  58.         }  
  59.     });  
  60.       
  61.     mTextView.setText("点击按钮开始更新时间");  
  62.     super.onCreate(savedInstanceState);  
  63.     }  
  64.   
  65.     public void ShowDialog(String string) {  
  66.     AlertDialog.Builder builder = new AlertDialog.Builder(  
  67.         HandlerActivity.this);  
  68.     builder.setIcon(R.drawable.icon);  
  69.     builder.setTitle(string);  
  70.     builder.setPositiveButton("确定"new DialogInterface.OnClickListener() {  
  71.         public void onClick(DialogInterface dialog, int whichButton) {  
  72.         finish();  
  73.         }  
  74.     });  
  75.     builder.show();  
  76.     }  
  77.   
  78.    
  79.   
  80.     @Override  
  81.     public void run() {  
  82.   
  83.     while (mRunning) {  
  84.         try {  
  85.         mShowNumber++;  
  86.         /** 把须要的数据放入bandle中 **/  
  87.         Bundle bandle = new Bundle();  
  88.         bandle.putString("number", String.valueOf(mShowNumber));  
  89.   
  90.         /** 设置这条信息的编号为更新时间 **/  
  91.         /** 将bandle写入message中 **/  
  92.         /** 最后将这个message发送出去 **/  
  93.         /** mShowNumber小于10更新时间 否则更新完毕 **/  
  94.         Message msg = new Message();  
  95.         if(mShowNumber <=10) {  
  96.             msg.what = UPDATE_TIME;   
  97.         }else {  
  98.             mRunning = false;  
  99.             msg.what = UPDATE_COMPLETED;    
  100.         }  
  101.         msg.setData(bandle);  
  102.         handler.sendMessage(msg);  
  103.         Thread.sleep(1000);  
  104.         } catch (InterruptedException e) {  
  105.         e.printStackTrace();  
  106.         }  
  107.     }  
  108.     }  
  109. }  

相关推荐