我的应用程序中有一项服务,每隔几秒钟就会添加一个通知。我的问题是,当应用程序停止时,它不会停止。有人能告诉我为什么吗?
我的代码:
服务等级:
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>
2条答案
按热度按时间ovfsdjhp1#
要解决此问题,您可以创建一个在应用程序停止时停止服务的机制。使用ReminderService类的onDestroy()方法中的标志来执行此操作。这将在应用程序停止时停止服务。
若要获得此结果,可以对代码进行以下更改:
ffx8fchx2#
我的问题是,应用程序停止时,它不会停止
我不知道你是如何定义“应用程序停止”的。
我可以告诉你,你正在泄漏一个线程。一旦启动,该线程将运行,直到进程终止。确切 * 何时 * 进程将终止是一个复杂的主题。
如果这不是你想要的行为,你需要在某个时候停止那个线程。考虑到你现有的代码,the previous answer给了你一个解决方案。或者,切换到类似
ScheduledExecutorService
的代码而不是Thread.sleep()
。