采集的小蜜蜂 发表于 2021-6-16 18:41

【安卓】后台服务总是被杀死。

本帖最后由 采集的小蜜蜂 于 2021-6-16 18:42 编辑

用的小米6,安卓9,

目标:点击按钮开启AlarmService.class,
         在服务中制定一个10秒后的AlarmManager定时任务,
         定时到了后会执行新的Service,pendingintent(NotificationService.class)
         在这个服务中会把通知的一些相关内容一下。
public class AlarmService extends Service {
    public AlarmManager alarmManager;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
      return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
      Intent intentservice=new Intent(this,NotificationService.class);
      PendingIntent pendingIntent=PendingIntent.getService(this,0,intentservice,0);
      alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
      alarmManager.setExact(AlarmManager.RTC_WAKEUP, finalchuo, pendingIntent);
      return START_STICKY;
    }


package com.ykd.bed.service;

import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.IBinder;

import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;

import com.ykd.bed.R;
import com.ykd.bed.activity.AutoSearchActivity;

import java.util.Calendar;

import static com.ykd.bed.activity.WakeUpActivity.finalchuo;

public class NotificationService extends Service {
    private NotificationChannel notificationChannel = null;
    public AlarmManager alarmManager;
    private PendingIntent pendingIntent;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
      return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

      alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
      alarmManager.setExact(AlarmManager.RTC_WAKEUP, finalchuo, pendingIntent);

      Intent intentSevice=new Intent(this,NotificationService.class);
      pendingIntent=PendingIntent.getService(this,0,intentSevice,0);
      NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            notificationChannel = new NotificationChannel("1", "channel_name", NotificationManager.IMPORTANCE_HIGH);
            notificationManager.createNotificationChannel(notificationChannel);
      }

      Notification notification=new NotificationCompat.Builder(this,"1")
                .setContentTitle("唤醒闹钟")
                .setContentText("滑动关闭闹钟")
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.app_icon)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.app_icon))
                .setPriority(NotificationManager.IMPORTANCE_HIGH)
                .setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_ALL)
                .build();
      notificationManager.notify(1,notification);
      return START_STICKY;
    }
}

问题:
          使用APP或使APP切换到后台以后(直接返回到桌面,后台不关闭),都能在状态栏成功接收到通知。
          但凡后台退出APP后,如果不把APP的自启动和后台限制设置为无限制,就永远收不到通知

我感觉在我后台划掉APP后,服务也被杀死了,我使用的startService,不是bindservice。
另外我想问一下怎么让我的通知不进入到小米的不重要通知之内。

ydh 发表于 2021-6-16 19:33

国产手机系统的问题。自带软件可以为所欲为。你安装的就要时时被监看。你想用舒服了?换能真root的手机吧!

被封号的萌新 发表于 2021-6-16 20:48

风轻然雨朦胧 发表于 2021-6-16 21:22

这不是就是垃圾miui的问题吗

Ly_轮回 发表于 2021-6-16 22:22

就差报MIUI身份证了

Domado 发表于 2021-6-17 01:48

去了解一下安卓后台保活 你会有收获

色色 发表于 2021-6-17 02:53

小米手机需要修改 5 个地方才能让一款 Android 应用正常工作
1.开发者选项关闭 MIUI 优化
2.设置内存免清理白名单
3.关闭应用智能省电
4.授权管理允许被唤醒
5.开发者选项禁用系统内存优化
转自v2ex
小米5测试有效
页: [1]
查看完整版本: 【安卓】后台服务总是被杀死。