Android学习之服务初体验

?概念

  Service(服务)是一个长期运行在后台,没有用户界面的应用组件,即使切换到另一个应用程序或者后台,服务也可以正常运行;

  因此,服务适合执行一些不需要显示界面的后台耗时操作,比如下载网络数据,播放音乐等。

?定义一个服务

  新建一个 ServiceTest 项目,然后右击  com.example.servicetest->New->Service->Service ;

Android学习之服务初体验

  会弹出如下图所示的窗口:

Android学习之服务初体验

  可以看到,这里我们将服务命名为 MyService(由于我之前创建过,所以左下角提示名字重复):

  • exported :表示是否允许除了当前程序之外的其他程序访问这个服务

    • 如果设置为 true,则能够被调用或交互,通常如果一个服务需要跨进程使用需要这么设置,否则不能
    • 设置为 false 时,只有同一个应用程序的组件或带有相同用户 ID 的应用程序才能启动或绑定该服务
  • enabled :指该服务是否能够被实例化

    • 如果设置为 true,则能够被实例化,否则不能被实例化,默认值是 true
    • 一般情况下,我们都会需要实例化,所以也可以选择不设置

  需要注意的是,每一个服务都需要在 AndroidManifest.xml 文件中进行注册,

  因为我们是通过 Android Studio New 的 Service ,

  所以 Android Studio 默认帮我们在清单文件中添加对该 Service 的注册;

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.servicetest">

    <application
        ......>

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

        <activity android:name=".MainActivity">
            ......
        </activity>
        
    </application>

</manifest>

  现在观察 MyService 中的代码,如下所示:

public class MyService2 extends Service {
    public MyService2() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

  可以看到,MyService 是继承自 Service 类的,说明这是一个服务;

  目前,MyService 中可以算是空空如也,但有一个  onBind()  方法特别醒目,

  这个方法是 Service 中唯一的一个抽象方法,所以必须要在子类里实现,后面会提及该方法的用法;

Android学习之服务初体验

  既然是定义一个服务,自然应该在服务中去处理一些事情,这时就要重写 Service 中的另外一些方法了;

MyService.java

public class MyService extends Service {
    
    public final static String TAG = "MyService";
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate: ");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand: ");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }
}

  可以看到,在该代码中重写了  onCreate()onStartCommand() , onDestroy()  方法,并分别在它们的方法体中打印Log日志;

?启动和停止服务

  启动和停止服务主要是借助 Intent 来实现的,下面就让我们在 ServiceTest 项目中尝试去启动以及停止 MyService;

  首先修改 activity_main.xml 中的代码;

activity_main.xml

?

 

Android学习之服务初体验

上一篇:browser-sync : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\browser-sync.ps1,


下一篇:Android Toast使用的简单小结