Service

作者: TakeItEasyJQ | 来源:发表于2017-08-23 10:34 被阅读0次

    这只是我在学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即可

    相关文章

      网友评论

          本文标题:Service

          本文链接:https://www.haomeiwen.com/subject/auxddxtx.html