码迷,mamicode.com
首页 > 其他好文 > 详细

Service

时间:2016-05-12 21:01:05      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

定义:

- 后台运行,不可见,没有界面

- 优先级高于Activity

用途:

- 播放音乐、记录地理信息位置的改变、监听某种动作...



- 运行在主线程,不能用它来做耗时的请求或者动作

- 可以在服务中开一个线程,在线程中做耗时操作


类型:

1.本地服务(应用程序内部)

startService stopService stopSelf stopSelfResult

bindService unbindService 


2.远程服务(Remote Service)

- Android系统内部的应用程序之间

- 定义IBinder接口


Start方式特点:

- 服务跟启动源没有任何联系

- 无法得到服务对象


Bind方式特点:

- 通过Ibinder接口实例,返回一个ServiceConnection对象给启动源

- 通过ServiceConnection对象的相关方法可以得到Service对象




        <service android:name="com.example.servicedemo.MyStartService" ></service>


public class MyStartService extends Service {
	
	@Override
	public void onCreate() {
		Log.i("info", "Service--onCreate");
		super.onCreate();
	}
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.i("info", "Service--onStartCommand");
		return super.onStartCommand(intent, flags, startId);
	}

	@Override
	public IBinder onBind(Intent intent) {
		Log.i("info", "Service--onBind");
		return null;
	}
	
	@Override
	public void onDestroy() {
		Log.i("info", "Service--onDestroy");
		super.onDestroy();
	}
	

}


public void doClick(View v) {
    	switch (v.getId()) {
		case R.id.start:
			intent1 = new Intent(MainActivity.this, MyStartService.class);
			startService(intent1);
			break;
		
		case R.id.stop:
			stopService(intent1);
			break;
			
		default:
			break;
		}
    }


第一次启动

onCreate()

onStartCommand()

以后启动只调用onStartCommand()

停止时调用onDestroy()

停止时也只停止一次



        <service android:name="com.example.servicedemo.MyBindService" ></service>


public class MyBindService extends Service {
	
	@Override
	public void onCreate() {
		Log.i("info", "BindService--onCreate");
		super.onCreate();
	}

	@Override
	public IBinder onBind(Intent intent) {
		Log.i("info", "BindService--onBind");
		return null;
	}
	
	@Override
	public void unbindService(ServiceConnection conn) {
		Log.i("info", "BindService--unbindService");
		super.unbindService(conn);
	}
	
	@Override
	public void onDestroy() {
		Log.i("info", "BindService--onDestroy");
		super.onDestroy();
	}

}



		case R.id.bind:
			intent2 = new Intent(MainActivity.this, MyBindService.class);
			bindService(intent2, null, Service.BIND_AUTO_CREATE);
			break;
			
		case R.id.unbind:
			unbindService(null);
			break;


未绑定服务就直接解绑定会报错

绑定服务时调用onCreate() onBind()方法


解绑定时调用onDestroy()方法

解绑定只能执行一次

多次点击会报错



	public class MyBinder extends Binder {
		public MyBindService getService() {
			return MyBindService.this;
		}
	}

	@Override
	public IBinder onBind(Intent intent) {
		Log.i("info", "BindService--onBind");
		return new MyBinder();
	}



	MyBindService service;
	
	ServiceConnection conn = new ServiceConnection() {
		
		// 当启动源跟Service的连接意外丢失的时候会调用这个方法
		// 比如当Service崩溃了或者被强行杀死了
		@Override
		public void onServiceDisconnected(ComponentName name) {
			
		}
		
		// 当启动源跟Service成功连接之后将会自动调用这个方法
		@Override
		public void onServiceConnected(ComponentName name, IBinder binder) {
			service = ((MyBinder)binder).getService();
		}
	};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void doClick(View v) {
    	switch (v.getId()) {
		case R.id.start:
			intent1 = new Intent(MainActivity.this, MyStartService.class);
			startService(intent1);
			break;
		
		case R.id.stop:
			stopService(intent1);
			break;
			
		case R.id.play:
			service.Play();
			break;
			
		case R.id.pause:
			service.Pause();
			break;			

		case R.id.next:
			service.Next();
			break;			
			
		case R.id.bind:
			intent2 = new Intent(MainActivity.this, MyBindService.class);
//			bindService(intent2, null, Service.BIND_AUTO_CREATE);
//			startService(intent2);
			bindService(intent2, conn, Service.BIND_AUTO_CREATE);
			break;
			
		case R.id.unbind:
//			unbindService(null);
			unbindService(conn);
			break;
			
		default:
			break;
		}
    }
    
    @Override
    protected void onDestroy() {
    	stopService(intent2);
    	unbindService(conn);
    	super.onDestroy();
    }



Service

标签:

原文地址:http://blog.csdn.net/duanliuchang/article/details/51351141

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!