Android Activity与Service间的通讯之一(回调函数)

来源:互联网 发布:xp系统禁止安装软件 编辑:程序博客网 时间:2024/05/22 03:43
import android.app.Service;  import android.content.Intent;  import android.os.Binder;  import android.os.IBinder;    public class MsgService extends Service {      /**      * 进度条的最大值      */      public static final int MAX_PROGRESS = 100;      /**      * 进度条的进度值      */      private int progress = 0;            /**      * 更新进度的回调接口      */      private OnProgressListener onProgressListener;                  /**      * 注册回调接口的方法,供外部调用      * @param onProgressListener      */      public void setOnProgressListener(OnProgressListener onProgressListener) {          this.onProgressListener = onProgressListener;      }        /**      * 增加get()方法,供Activity调用      * @return 下载进度      */      public int getProgress() {          return progress;      }        /**      * 模拟下载任务,每秒钟更新一次      */      public void startDownLoad(){          new Thread(new Runnable() {                            @Override              public void run() {                  while(progress < MAX_PROGRESS){                      progress += 5;                                            //进度发生变化通知调用方                      if(onProgressListener != null){                          onProgressListener.onProgress(progress);                      }                                            try {                          Thread.sleep(1000);                      } catch (InterruptedException e) {                          e.printStackTrace();                      }                                        }              }          }).start();      }          /**      * 返回一个Binder对象      */      @Override      public IBinder onBind(Intent intent) {          return new MsgBinder();      }            public class MsgBinder extends Binder{          /**          * 获取当前Service的实例          * @return          */          public MsgService getService(){              return MsgService.this;          }      }    }
<pre name="code" class="java">package com.example.communication;    import android.app.Activity;  import android.content.ComponentName;  import android.content.Context;  import android.content.Intent;  import android.content.ServiceConnection;  import android.os.Bundle;  import android.os.IBinder;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;  import android.widget.ProgressBar;    public class MainActivity extends Activity {      private MsgService msgService;      private ProgressBar mProgressBar;              @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);                              //绑定Service          Intent intent = new Intent("com.example.communication.MSG_ACTION");          bindService(intent, conn, Context.BIND_AUTO_CREATE);                              mProgressBar = (ProgressBar) findViewById(R.id.progressBar1);          Button mButton = (Button) findViewById(R.id.button1);          mButton.setOnClickListener(new OnClickListener() {                            @Override              public void onClick(View v) {                  //开始下载                  msgService.startDownLoad();              }          });                }              ServiceConnection conn = new ServiceConnection() {          @Override          public void onServiceDisconnected(ComponentName name) {                        }                    @Override          public void onServiceConnected(ComponentName name, IBinder service) {              //返回一个MsgService对象              msgService = ((MsgService.MsgBinder)service).getService();                            //注册回调接口来接收下载进度的变化              msgService.setOnProgressListener(new OnProgressListener() {                                    @Override                  public void onProgress(int progress) {                      mProgressBar.setProgress(progress);                                        }              });                        }      };        @Override      protected void onDestroy() {          unbindService(conn);          super.onDestroy();      }      }  

新建一个回调接口:

public interface OnProgressListener {void onProgress(int progress);}

Activity调用bindService (Intent service, ServiceConnection conn, int flags)方法,得到Service对象的一个引用,这样Activity可以直接调用到Service中的方法,如果要主动通知Activity,我们可以利用回调方法。



                                             
0 0
原创粉丝点击