Android,IntentService在应用程序被杀死时死亡

时间:2017-08-19 13:21:55

标签: android

我有意向服务通知用户。其onHandleIntent如下:

    @Override
    protected void onHandleIntent(final Intent workIntent) {
    for(int i = 0; i < 10; i++){
        try{
            Thread.sleep(2000);
            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
            mBuilder.setSmallIcon(R.mipmap.ic_launcher);
            mBuilder.setContentTitle(String.valueOf(i) + "times called!");
            mBuilder.setContentText("Hi, This is Android Notification Detail!");

            NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

            mNotificationManager.notify(i, mBuilder.build());
        }catch(InterruptedException ex){}
    }
}

如果应用程序处于活动状态,或者即使处于活动状态,处于停止状态,此方法也可以正常工作。

但是当我杀了应用程序(向左滑动)时,服务执行停止。即使它还没有完成。我怎么能克服这个?

1 个答案:

答案 0 :(得分:0)

即使您从最近关闭应用,也必须将IntentService作为前台运行才能使其保持不变。 Service.startForeground

 @Override
protected void onHandleIntent(final Intent workIntent) {
for(int i = 0; i < 10; i++){
    try{
        Thread.sleep(2000);
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
        mBuilder.setSmallIcon(R.mipmap.ic_launcher);
        mBuilder.setContentTitle(String.valueOf(i) + "times called!");
        mBuilder.setContentText("Hi, This is Android Notification Detail!");

        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        // here you can start it as foreground
        startForeground(i, mBuilder.build());
    }catch(InterruptedException ex){}
}

如果您使用i创建通知,那么您将创建多个通知(在您的情况下为10个不同),这是不好的。您可以在startForeground中使用一些常量值而不是i。 在实际应用程序中使用IntentService之前,请确保它是正确的选择。以下是关于android Things to consider before running background tasks

中不同类型线程的简短讨论