加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Android软件开发之应用程序之间的通信详解

发布时间:2021-11-25 19:02:02 所属栏目:教程 来源:互联网
导读:Android 开发中在程序之间通讯的接口做的还是非常丰富的 本例主要向大家介绍程序之间是如何进行沟通,有哪几种沟通方式 如何来实现沟通。 1.使用handler传递消息 handler 大家可以把它想象成主线程(UI线程)的一个子线程,它可以给主线程(UI线程)发送数据从而

Android 开发中在程序之间通讯的接口做的还是非常丰富的 本例主要向大家介绍程序之间是如何进行沟通,有哪几种沟通方式 如何来实现沟通。
 
1.使用handler传递消息
 
handler 大家可以把它想象成主线程(UI线程)的一个子线程,它可以给主线程(UI线程)发送数据从而更新主线程(UI线程)的UI与逻辑,handler 是一个子线程所以它的耗时操作不会阻塞主线程,大家都知道在android的开发中如果代码中某个地方阻塞主线程超过5秒的话系统会提示ANR (系统提示强制关闭)所以在耗时操作上我们可以考虑开启一个子线程避免ANR。  handler会向主线程发送消息 会以队列的形式排列着配合等待主线程更新UI 逻辑 等等。
 
 
下面这个例子诠释了这一点 利用handler传递消息来更新主线程的UI显示内容 点击按钮后每过一秒通过handler发送消息更新UI线程显示的时间 直到显示时间更新到10 然后结束这个线程。
 
 
 
 
 
 
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();  
        }  
    }  
    }  
}  

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读