欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android基础学习--Service

程序员文章站 2022-03-21 13:17:12
Android基础学习–Service首先,创建一个类MyService让它继承Service/**1.服务只会被创建一次,可以通过外部调用的stopService或者自身的stopSelf来终止服务*2.当执行一个已经启动的服务时,会直接调用onStartCommand方法来执行业务* 3.默认情况下服务与主线程在同一个线程中执行,如果服务在执行一个比较耗时的操作,我们需要开启一个子线程来完成工作,避免阻塞主线程* 4.若使用startService开启服务,在没有关闭的情况下会一直在后台运行...

Android基础学习–Service

startService

首先,创建一个类MyService让它继承Service

/*
*1.服务只会被创建一次,可以通过外部调用的stopService或者自身的stopSelf来终止服务
*2.当执行一个已经启动的服务时,会直接调用onStartCommand方法来执行业务
* 3.默认情况下服务与主线程在同一个线程中执行,如果服务在执行一个比较耗时的操作,我们需要开启一个子线程来完成工作,避免阻塞主线程
* 4.若使用startService开启服务,在没有关闭的情况下会一直在后台运行
 */

public class MyService extends Service {

    public MyService(){

    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
         new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 50; i++) {
                    System.out.println("onStartCommand -->" + i + "-- >" + Thread.currentThread().getName());
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    if (i == 30){
                        MyService.this.stopSelf();
                        break;
                    }
                }
            }
        }).start();
        return super.onStartCommand(intent, flags, startId);
    }
}

其次,在配置文件中注册Service

<service android:name=".MyService"
            android:exported="true"
            android:enabled="true">

        </service>

bindService

    private MyBindService.IServiceControl binder;
    //绑定服务的连接回调接口
    private ServiceConnection connection = new ServiceConnection() {

        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            binder = (MyBindService.IServiceControl) iBinder;
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            binder = null;
        }
    };

    public void bindService(View v){
        Intent intent = new Intent(MainActivity.this,MyBindService.class);
        bindService(intent,connection, Context.BIND_AUTO_CREATE);
    }

    public void unbindService(View v){
        if (connection != null){
            unbindService(connection);
        }
    }
public class MyBindService extends Service {

    public MyBindService(){

    }

    private class InnerBinder extends Binder implements IServiceControl{
         public void callServiceInnerMethod(){
            sayHello();
        }
    }

    public interface IServiceControl {
        void callServiceInnerMethod();
    }

    private void sayHello() {
        Toast.makeText(this, "555", Toast.LENGTH_SHORT).show();
    }


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return new InnerBinder();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
       new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 50; i++) {
                    System.out.println("onStartCommand -->" + i + "-- >" + Thread.currentThread().getName());
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    if (i == 30){
                        MyBindService.this.stopSelf();
                        break;
                    }
                }
            }
        }).start();

        return super.onStartCommand(intent, flags, startId);
    }
}

本文地址:https://blog.csdn.net/weixin_44388411/article/details/108579963