本文实例讲述了Android Service控件用法。分享给大家供大家参考,具体如下:
1、Service是一个应用程序的组件
2、Service没有图形化界面
3、用来处理耗时比较长的功能(下载、播放MP3)
4、更新ContentProvider、Intent以及系统的启动
Servcie不是一个单独的进程,不是一个线程
定义一个Service比较简单,只要继承Service类,实现其生命周期的方法即可。一个定义好的Service必须在AndroidManifest.xml文件中通过<service>声明才能使用
<service android:name="MyService">
<intent-filter>
<action android:name="hb.com.MYSERVICE"/>
</intent-filter>
</service>
备注:MyService一定要是继承了Service类的,并且名称和类名是一致的
action的名称是自定义的,只要在bindService或者操作Intent的时候就能够被捕获
public class MyService extends Service {
public class MyBinder extends Binder{
public MyService getMyService(){
return MyService.this;
}
}
public void test(){
System.out.println("test");
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("onBind");
return new MyBinder();
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
System.out.println("onCreate");
super.onCreate();
}
@Override
public boolean onUnbind(Intent intent) {
System.out.println("I am unbind");
return super.onUnbind(intent);
}
}
public class MainActivity extends Activity {
private static final String MYSERVICE = "hb.com.MYSERVICE";
private boolean flag = false;
//bindService()方法需要ServiceConnection接口作为参数,所以定义了这个变量,目的是为了实现里面的两个方法
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
System.out.println("onServiceDisconnected");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("onServiceConnected");
MyBinder myBinder = (MyBinder)service;
MyService myService = myBinder.getMyService();
myService.test();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.start).setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(MYSERVICE);
//先调用MyService的onCreate()方法,然后调用onBind()方法,最后调用onServiceConnected()方法
//因此IBinder返回的值就是通过onBind()方法返回的对象,定义getMyService()方法是为了得到MyService对象,用户在这个类中添加自己需要的一些方法,这样可以做一些逻辑处理
bindService(intent, conn, Service.BIND_AUTO_CREATE);
flag = true;
}
});
findViewById(R.id.stop).setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
if(flag){
//取消绑定事件,会调用MyService的onUnbind()方法,但是不会调用onServiceDisconnected()这个方法,原因不明
unbindService(conn);
flag = false;
}
}
});
}
}
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
您可能感兴趣的文章:浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路Android基于Service的音乐播放器Android实现开机自动启动Service或app的方法Android使用Messenger实现service与activity交互深入剖析Android系统中Service和IntentService的区别详解Android中Service服务的基础知识及编写方法Android实现Activity、Service与Broadcaster三大组件之间互相调用的方法详解Android Service中方法使用详细介绍