service
六式 人气:1服务的创建
public class Myservice extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
然后在清单文件中注册服务。
<service android:name=" "/>
服务的启动方式
startService方式
public class Myservice extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
然后在调用者里写开启和关闭服务的代码
public void start(){
Intent intent=new Intent(this,Myservice.class);
startService(intent);
}
public void stop(){
Intent intent=new Intent(this,Myservice.class);
stopService(intent);
}
然后在清单文件中注册。
服务创建时执行的是onCreate()方法,服务启动时(也就是执行startService()方法时)会执行onStartCommand()方法。
onCreate()方法只在首次创建服务时调用,onStartCommand()服务启动时都会调用。
onDestory()则是当服务不再使用且将被销毁时,系统将会调用。
服务与调用者没有绝对的关联,当调用者关闭后,服务还会在后台运行。
bindService方式
创建service类
public class Myservice extends Service {
class MyBinder extends Binder{
void play(){};
void next(){};
void pause(){};
}
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
@Override
public void onCreate() {
super.onCreate();
}
public void play(){
}
public void next(){
}
public void pause(){
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
创建调用者类
public class MainActivity extends AppCompatActivity {
private Myservice.MyBinder myBinder;
private Mycon mycon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//绑定服务
public void bind(){
if(mycon==null){
mycon=new Mycon();
}
Intent intent=new Intent(this,Myservice.class);
//第三个参数是如果服务不存在就创建
bindService(intent,mycon,BIND_AUTO_CREATE);
}
//解绑服务
public void unbind(){
if(mycon!=null){
unbindService(mycon);
mycon=null;
}
}
//调用服务中的方法
public void call(){
myBinder.next();
myBinder.pause();
myBinder.play();
}
//创建Mycon类,用于实现连接服务
private class Mycon implements ServiceConnection{
//绑定服务时调用,返回Myservice里面的Ibinder对象
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder= (Myservice.MyBinder) service;
}
//服务失去连接时调用
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
}
这里调用者没有写具体实现,只是一个大致流程。
这里通过bindService()绑定服务(系统会调用Myservice中的onBind()方法),然后通过call方法可以调用MyService类中的各个方法,操作完成后可以调用unbindService()方法解绑。
调用者与服务关联,当调用者关闭时,服务也会关闭。服务可以与调用者进行方法调用和数据交互。
服务的生命周期
服务的通信
本地服务通信
本地服务通信是指应用程序内部的通信。
上面bindService的例子就是本地服务通信。
远程服务通信
远程服务通信是指两个应用程序间的通信。
创建aidl接口
interface IService {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
String getName();
int getPrice();
}
创建Aservice类
public class Aservice extends Service {
private class IServieBind extends IService.Stub{
@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
}
@Override
public String getName() throws RemoteException {
return "lisi";
}
@Override
public int getPrice() throws RemoteException {
return 120;
}
}
@Override
public IBinder onBind(Intent intent) {
return new IServieBind();
}
@Override
public void onCreate() {
super.onCreate();
}
加载全部内容