Android Serivce 例子,androidserivce,BindingServi
分享于 点击 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); } }
用户点评