这只是我在学Android过程中对于所学知识的巩固和方便日后查询的学习笔记,能帮助到有需要的和我一样的初学者就更好了
服务中的代码是运行在主线程中的,所以不可以直接做需要长时间维持的动作
但是虽然其运行在主线程中,但是却不能直接更新UI
Service的具体实现##
1、MyService继承Service
2、重写onCreate()、onStartCommand()、onDestroy()
3、Intent开启服务或Notification开启前台服务
Service与Activity的通信(Binder)
1、新建MyService继承Service
2、新建MyService内部类MyBinder继承Binder类并使IBinder onBinder()返回此对象
3、Activity中新建ServiceConnection接口对象connection并重写其中方法
4、建立Intent并调用bindService()与unbindService()来绑定与解绑
public MyService extends Service{
private MyBinder mbinder=new MyBinder();
class MyBinder extends Binder{
//方法,如void start(); void stop();
}
@override
public IBinder onBinde(Intent intent){
return mbinder;
}
}
Activity中
private MyService.MyBinder myBinder;
private ServiceConnection connection=new ServiceConnection(){
@override
public void onServiceConnected(ComponentName name ,IBinder service){
myBinder=(MyService.MyBinder)service;
myBinder.start();//MyBinder中的方法
}
@override
public void onServiceDisConnected(ComponentName name){
//这里貌似不用写什么东西
}
}
绑定与解绑
Intent intent=new Intent(MainActivity.this ,MyService.class);
bindService(intent ,conntction ,BIND_AUTO_CREATE);
-------------------------------------------------------------------------------
unbindeService(connection);
前台服务
public class MyService extends Service{
@override
public void onCreate(){
Intent intent=new Intent(this ,MainActivity.class);
PeddingIntent pi=PeddingIntent.getActivity(this ,0 ,intent ,0);
Notification nocification=new NotificationCompat.Builder(this)
...............
.setContentIntent(pi)
.build();
startForeground(1 ,notification);
}
}
IntentService
运行完代码就关闭服务
IntentService的onHandleIntent()可进行UI更新
具体实现
继承IntentService即可
网友评论