Android,当应用程序被终止时,IntentService将终止

Android,当应用程序被终止时,IntentService将终止,android,Android,我有一个意向服务通知用户。其主要内容如下: @Override protected void onHandleIntent(final Intent workIntent) { for(int i = 0; i < 10; i++){ try{ Thread.sleep(2000); NotificationCompat.Builder mBuilder = new NotificationCompat

我有一个意向服务通知用户。其主要内容如下:

    @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){}
    }
}
@覆盖
受保护的手控无效内容(最终目的工作内容){
对于(int i=0;i<10;i++){
试一试{
《睡眠》(2000年);
NotificationCompat.Builder mBuilder=新的NotificationCompat.Builder(此);
mBuilder.setSmallIcon(R.mipmap.ic_启动器);
mBuilder.setContentTitle(String.valueOf(i)+“times called!”);
setContentText(“嗨,这是Android通知详细信息!”);
NotificationManager mNotificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION\u服务);
mNotificationManager.notify(i,mBuilder.build());
}catch(InterruptedException ex){}
}
}
如果应用程序处于活动状态,或者甚至处于后台停止状态,这种方法都能完美工作


但当我关闭应用程序(向左滑动)时,服务执行停止。即使它还没有完成。如何克服这一问题?

您必须将您的
IntentService
作为前台运行,以使其在最近关闭应用程序时保持不变。

@覆盖
受保护的手控无效内容(最终目的工作内容){
对于(int i=0;i<10;i++){
试一试{
《睡眠》(2000年);
NotificationCompat.Builder mBuilder=新的NotificationCompat.Builder(此);
mBuilder.setSmallIcon(R.mipmap.ic_启动器);
mBuilder.setContentTitle(String.valueOf(i)+“times called!”);
setContentText(“嗨,这是Android通知详细信息!”);
NotificationManager mNotificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION\u服务);
//在这里,您可以将其作为前台启动
startForeground(i,mBuilder.build());
}catch(InterruptedException ex){}
}
如果您使用
i
创建通知,那么您将创建多个通知(在您的情况下是10个不同的通知),这是不好的。您可以在
startForeground
中使用一些常量值而不是i。
此外,在实际应用程序中使用IntentService之前,请确保它是正确的选择。下面是关于android中不同类型线程的简短讨论

您必须将您的
IntentService
作为前台运行,以便即使您最近关闭应用程序,它也能持久存在。

@覆盖
受保护的手控无效内容(最终目的工作内容){
对于(int i=0;i<10;i++){
试一试{
《睡眠》(2000年);
NotificationCompat.Builder mBuilder=新的NotificationCompat.Builder(此);
mBuilder.setSmallIcon(R.mipmap.ic_启动器);
mBuilder.setContentTitle(String.valueOf(i)+“times called!”);
setContentText(“嗨,这是Android通知详细信息!”);
NotificationManager mNotificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION\u服务);
//在这里,您可以将其作为前台启动
startForeground(i,mBuilder.build());
}catch(InterruptedException ex){}
}
如果您使用
i
创建通知,那么您将创建多个通知(在您的情况下是10个不同的通知),这是不好的。您可以在
startForeground
中使用一些常量值而不是i。
在实际应用程序中使用IntentService之前,请确保它是正确的选择。下面是关于android中不同类型线程的简短讨论

谢谢你的回答。这确实起到了作用。但我还有一个问题。当我删除for循环和try/catch块时,代码不起作用。为什么会这样?谢谢你的回答回答。这确实奏效了。但我还有一个问题。当我删除for循环和try/catch块时,代码不起作用。为什么会这样?
 @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){}
}