android 为什么应用程序终止时我的服务不停止?

cedebl8k  于 2022-12-28  发布在  Android
关注(0)|答案(2)|浏览(158)

我的应用程序中有一项服务,每隔几秒钟就会添加一个通知。我的问题是,当应用程序停止时,它不会停止。有人能告诉我为什么吗?
我的代码:
服务等级:

public class ReminderService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(() -> {
            while (true) {
                MyNotificationManager.postNotification(ReminderService.this, R.drawable.ic_back, "Return", "Return");
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        return super.onStartCommand(intent, flags, startId);
    }

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

主要活动:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent serviceIntent = new Intent(MainActivity.this, ReminderService.class);
        startService(serviceIntent);
        startActivity(new Intent(this, PracticeActivity.class));
    }
}

我的清单:

<service android:name=".service.ReminderService"></service>
ovfsdjhp

ovfsdjhp1#

要解决此问题,您可以创建一个在应用程序停止时停止服务的机制。使用ReminderService类的onDestroy()方法中的标志来执行此操作。这将在应用程序停止时停止服务。
若要获得此结果,可以对代码进行以下更改:

public class ReminderService extends Service {

private boolean isStopped = false;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    new Thread(() -> {
        while (!isStopped) {
            MyNotificationManager.postNotification(ReminderService.this, R.drawable.ic_back, "Return", "Return");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();

    return super.onStartCommand(intent, flags, startId);
}

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

@Override
public void onDestroy() {
    super.onDestroy();
    isStopped = true;
} }
ffx8fchx

ffx8fchx2#

我的问题是,应用程序停止时,它不会停止
我不知道你是如何定义“应用程序停止”的。
我可以告诉你,你正在泄漏一个线程。一旦启动,该线程将运行,直到进程终止。确切 * 何时 * 进程将终止是一个复杂的主题。
如果这不是你想要的行为,你需要在某个时候停止那个线程。考虑到你现有的代码,the previous answer给了你一个解决方案。或者,切换到类似ScheduledExecutorService的代码而不是Thread.sleep()

相关问题