欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android Serivce 例子,androidserivce,BindingServi

来源: javaer 分享于  点击 1723 次 点评:101

Android Serivce 例子,androidserivce,BindingServi


BindingService

public class BindingService extends Activity {        private static final String TAG = "BindingService";      // mService负责接收Service传过来的对象      LocalService mService;      boolean mBound = false;      Button bindBtn;      @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.main);          bindBtn = (Button) findViewById(R.id.bindBtn);            bindBtn.setOnClickListener(new OnClickListener(){                  @Override                                 public void onClick(View v) {                  Log.i(TAG, "OnClick....");                  if(mBound) {                      int num = mService.getRandomNumber();                      Toast.makeText(BindingService.this, num+"", Toast.LENGTH_LONG).show();                  }              }          });      }      @Override        protected void onStart() {          super.onStart();          // Bind to LocalService          Intent intent = new Intent(this, LocalService.class);          Log.i(TAG, "onStart.....onBind");          bindService(intent, mConnection, Service.BIND_AUTO_CREATE);      }      @Override        protected void onStop() {             super.onStop();                   // UnBind from the service                    if(mBound) {            unbindService(mConnection);              mBound = false;         }      }      //Defines callbacks for service binding, passed to bindService()      private ServiceConnection mConnection = new ServiceConnection() {             @Override             // 在Service断开的时候调用这个函数                public void onServiceDisconnected(ComponentName name) {                   // 另外说明在这里打log或者是使用Toast都不能显示,不知道是怎么回事                    mBound = false;               }          @Override            // 在Service连接以后调用这个函数            public void onServiceConnected(ComponentName name, IBinder service) {                     // we have bound to LocalService, cast the IBinder and get LocalService instance                      // 获得Service中的Binder对象                        // 另外说明在这里打log或者是使用Toast都不能显示,不知道是怎么回事                        LocalBinder binder = (LocalBinder) service;                       // 通过Binder对象获得Service对象,然后初始化mService                        mService = binder.getService();                       Log.i(TAG, "onServiceConnected.....");                        System.out.println("onServiceConnected.....");                        mBound = true;                    }          };      }  

LocalService

public class LocalService extends Service {      // Binder given to clients      // 返回一个Binder对象      private final IBinder mBinder = new LocalBinder();      // Random number generator      private final Random mGenerator = new Random();      /***       * Class used for the client Binder.Because we know this service always       * runs in the same process as its clients       */           public class LocalBinder extends Binder {            LocalService getService() {                // return this instance of LocalService so clients can call public method                return LocalService.this;            }        }      @Override        // 如果是通过startService()函数启动的时候,这个函数是不起作用的。       // public void onServiceConnected(ComponentName name, IBinder service) 返回的Activity        // IBinder service 对象        public IBinder onBind(Intent intent) {        // IBinder通信关键是利用Activity中的IBider对象获得service对象,然后调用service中的函数        // 传给Activity一个Binder对象,通过这个Binder对象调用getService()获得Service对象        return mBinder;        }      // method for clients        public int getRandomNumber() {        return mGenerator.nextInt(100);        }  } 
相关栏目:

用户点评