我的前台服务在杀死应用程序后在诸如vivo的某些设备上被杀死了?

问题描述

我的前台服务在杀死app后在诸如vivo的某些设备上被杀死了,有什么解决方法可以使其保持生命状态?

我正在使用前台服务,例如:

public class MyService extends IntentService {

    private final String TAG = "IntentService";
    private PowerManager.WakeLock wakeLock;

    public MyService() {
        super("MyService");
        setIntentRedelivery(true);
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.d(TAG,"onHandleIntent: Service running");
        for (int i = 0; i < 20; i++) {
            Log.d(TAG,"onHandleIntent: service running status: " + i);
            SystemClock.sleep(3000);
        }
    }

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

        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        this.wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"Service: WakeLock");
        this.wakeLock.acquire();
        Log.d(TAG,"onCreate: Wakelock acquired");


        Notification notification = new NotificationCompat.Builder(this,App.NOTIFICATION_CHANNEL_ID)
                .setContentTitle("Intent Service")
                .setContentText("Service running in background")
                .setSmallIcon(android.R.drawable.sym_def_app_icon)
                .build();
        startForeground(12,notification);
    }

    @Override
    public void onDestroy() {
        Log.d(TAG,"onDestroy: IntentService Destroyed");
        super.onDestroy();
        this.wakeLock.release();
        Log.d(TAG,"onDestroy: Wakelock released");
    }
}

解决方法

我通过一种变通办法使它起作用。

注册一个伪造的静态隐式接收器,如下所示:

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

<receiver android:name=".SampleBroadcast">
   <intent-filter>
      <action android:name="android.intent.action.BOOT_COMPLETED" />
   </intent-filter>
</receiver>

我的SampleBroadcast文件:

public class SampleBroadcast extends BroadcastReceiver {

    @Override
    public void onReceive(Context context,Intent intent) {

        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Log.d("Foreground App","Boot Completed");
        }

    }
}

这将我的应用放置在操作系统的自动启动部分

现在,当我启动服务时,即使我终止了正在运行的应用程序。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...