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