Android软件开发之应用程序之间的通信介绍
Android 开发中在程序之间通讯的接口做的还是非常丰富的 本例主要向大家介绍程序之间是如何进行沟通,有哪几种沟通方式 如何来实现沟通。
1.使用handler传递消息
handler 大家可以把它想象成主线程(UI线程)的一个子线程,它可以给主线程(UI线程)发送数据从而更新主线程(UI线程)的UI与逻辑,handler 是一个子线程所以它的耗时操作不会阻塞主线程,大家都知道在android的开发中如果代码中某个地方阻塞主线程超过5秒的话系统会提示ANR (系统提示强制关闭)所以在耗时操作上我们可以考虑开启一个子线程避免ANR。 handler会向主线程发送消息 会以队列的形式排列着配合等待主线程更新UI 逻辑 等等。
下面这个例子诠释了这一点 利用handler传递消息来更新主线程的UI显示内容 点击按钮后每过一秒通过handler发送消息更新UI线程显示的时间 直到显示时间更新到10 然后结束这个线程。
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();
- }
- }
- }
- }
相关推荐
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20