Android中前台服务创建方法

一提到前台服务,有经验的同学都会想到保活问题。现在其实有很多保活库可以供大家使用,不过这里还是对这种最传统的方式做一下记录。同时,类似音乐播放的软件我们也是需要用到前台服务的。

最关键的便是我们的Service类

public class MyService extends Service {

    private int one;
    private int count;

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

    @Override
    public void onCreate() {
        super.onCreate();
        startForeground(100,getNotification("标题","内容"));
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    try {
                        Log.i("infomationHaha",one+"");
                        one++;
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    private Notification getNotification(String title,String message){
        count++;
        //创建一个跳转到活动页面的意图
        Intent clickIntent = new Intent(this,MainActivity.class);
        clickIntent.putExtra("flag",count);
        //创建一个用于页面跳转的延迟意图
        PendingIntent contentIntent = PendingIntent.getActivity(this,count,clickIntent
                ,PendingIntent.FLAG_UPDATE_CURRENT);
        //创建一个通知消息的构造器
        Notification.Builder builder = new Notification.Builder(this);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            //Android8.0开始必须给每个通知分配对应的渠道
            builder = new Notification.Builder(this,"channel_id");
        }
        builder.setContentIntent(contentIntent)//设置内容的点击意图
                .setAutoCancel(true)//设置是否允许自动清除
                .setSmallIcon(R.mipmap.ic_launcher)//设置状态栏里的小图标
                .setTicker("提示消息来啦")//设置状态栏里面的提示文本
                .setWhen(System.currentTimeMillis())//设置推送时间,格式为"小时:分钟"
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//设置通知栏里面的大图标
                .setContentTitle(title)//设置通知栏里面的标题文本
                .setContentText(message);//设置通知栏里面的内容文本
        //根据消息构造器创建一个通知对象
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
            Notification notify = builder.build();
            return notify;
        }
        return null;
    }
}

onCreate方法中的startForeground方法是核心,只要调用了这个方法,就可以实现前台服务,提高应用的优先级。

另外,高于Android 9.0的版本需要添加一个前台服务的权限。

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

启动Service和清单文件注册与普通的Service使用是一样的。不会的同学可以参考我之前的文章。

猜你喜欢

转载自blog.csdn.net/weixin_38322371/article/details/114023770
今日推荐