当前位置: 代码迷 >> Android >> Android 四大组件学习之Service3
  详细解决方案

Android 四大组件学习之Service3

热度:46   发布时间:2016-04-27 23:52:17.0
Android 四大组件学习之Service三

上节我们学习了,如何用StartService启动服务,这节学习如何用BindService启动一个服务


首先看MyActivity的代码部分:

public class MyActivity extends Activity {	private Button btn_start;	private Button btn_end;	private MyServiceConnection sConnection;		@Override	protected void onCreate(Bundle savedInstanceState) {		// TODO Auto-generated method stub		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_myservice);				btn_start = (Button)findViewById(R.id.button1);		btn_end = (Button)findViewById(R.id.button2);		btn_start.setOnClickListener(new OnClickListener() {						@Override			public void onClick(View arg0) {				// 启动服务				Intent intent = new Intent(MyActivity.this, MyService.class);				//startService(intent);				Log.i("MyActivity", "创建服务按钮被按下!");				bindService(intent, sConnection, Context.BIND_AUTO_CREATE);			}		});				btn_end.setOnClickListener(new OnClickListener() {						@Override			public void onClick(View arg0) {				// 销毁服务				Intent intent = new Intent(MyActivity.this, MyService.class);				//stopService(intent);				Log.i("MyActivity", "销毁服务按钮被按下!");				unbindService(sConnection);			}		});	}		public class MyServiceConnection implements ServiceConnection	{		@Override//当连接服务成功后调用		public void onServiceConnected(ComponentName arg0, IBinder arg1) {			// TODO Auto-generated method stub			Log.i("MyActivity", "onServiceConnected");					}		@Override//当server所在的进程由于异常终止或者其他原因终止调用		public void onServiceDisconnected(ComponentName arg0) {			// TODO Auto-generated method stub			Log.i("MyActivity", "onServiceDisconnected");		}	}}
这次我们用的是bindService启动服务,而bindService和StartServer明显不同的就是传递的参数不同。bindService需要三个参数:

参数1: Intent不用多说

参数2:该参数是一个ServiceConnection的对象,该对象用于监听访问者和Service之间的连接情况。其中,OnServiceConnected是当调用者与服务连接成功后调用,注意的是OnserviceDisconnected不是调用者与服务断开时后调用,而是由于某种原因异常终止等才调用

参数3:指定绑定时是否自动创建service,当然了是service还没创建时。

布局文件和上一次的一样,不再多说

MyService的代码如下:

public class MyService extends Service {	private MyThread thread;	private boolean stopFlag = false;		@Override//必须实现的方法	public IBinder onBind(Intent arg0) {		// TODO Auto-generated method stub				//服务运行后,启动线程		if(!stopFlag)		{			thread.start();			thread.setFlag(true);			}		Log.i("MyService", "onBind------------");		return null;	}		@Override//被创建时的调用	public void onCreate() {		// TODO Auto-generated method stub				//服务创建时,实例化MyThread		thread = new MyThread();		Log.i("MyService", "onCreate------------");				super.onCreate();	}		@Override	@Deprecated//OnStart方法现在被OnStartCommd已经取代,其实在OnStartCommand也调用了OnStart	public void onStart(Intent intent, int startId) {		// TODO Auto-generated method stub		super.onStart(intent, startId);		Log.i("MyService", "onStart------------");	}			@Override//启动时会调用	public int onStartCommand(Intent intent, int flags, int startId) {		// TODO Auto-generated method stub		Log.i("MyService", "onStartCommand------------");		//服务运行后,启动线程		if(!stopFlag)		{			thread.start();			thread.setFlag(true);			}		return super.onStartCommand(intent, flags, startId);	}		@Override	public void onDestroy() {		// TODO Auto-generated method stub				//服务销毁时,停止线程任务		thread.setFlag(false);		Log.i("MyService", "onDestroy------------");				super.onDestroy();	}		@Override	public boolean onUnbind(Intent intent) {		// TODO Auto-generated method stub		Log.i("MyService", "onUnbind------------");		return super.onUnbind(intent);	}		class MyThread extends Thread	{		//设置flag		public void setFlag(Boolean flag)		{			stopFlag = flag;		}				@Override		public void run() {			super.run();			while(stopFlag)			{				//设置时间的输出方式				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");				String  time = format.format(new Date());								//显示时间				Log.i("MyService", time);								try {					//延迟一秒					Thread.sleep(1000);				} catch (InterruptedException e) {					// TODO Auto-generated catch block					e.printStackTrace();				}			}		}	}

当然了记得在配置文件中注册service

接下来看结果分析:

当点击启动服务后:

可以看到服务已经绑定

当点击销毁服务后:

可以看到服务已经解绑,同时服务销毁了。



今天关于bindService启动服务就到这里



版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案