此刻,在我的每一项活动的我有这样的方法:
private void registerReceiverClose(){
Activity activity = this;
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("CLOSE_ALL");
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
activity.finish();
}
};
registerReceiver(broadcastReceiver, intentFilter);
}
而这其中还有:
@Override
protected void onDestroy() {
unregisterReceiver(broadcastReceiver);
super.onDestroy();
}
他们通过以下注销按钮触发:
Button logout = findViewById(R.id.logout_button);
logout.setOnClickListener(click -> {
Intent intent = new Intent("CLOSE_ALL");
this.sendBroadcast(intent);
});
有一两件事,我敢肯定,以正确的方式不打烊,就是我有这样的代码:
private static final ScheduledExecutorService pollingScheduledExecutor = Executors.newSingleThreadScheduledExecutor();
private static final Object lock = new Object();
private static ScheduledFuture<?> currentRunningTask;
public void longPoll() {
synchronized (lock) {
if (currentRunningTask != null) {
currentRunningTask.cancel(true);
}
try {
currentRunningTask = pollingScheduledExecutor.scheduleAtFixedRate(this, 0, 3, TimeUnit.SECONDS);
} catch (Exception ignored) {
}
}
}
public void request() {
Thread requestThread = new Thread(this);
requestThread.start();
}
它继续发出请求,即使我想我应该退出,这将导致在服务器上的错误。
我怎样才能确保所有的线程停止正常和应用程序以正确的方式倒闭?
你可以wrapthe投票代码Service内。该服务然后可以停止使用
Intent intent = new Intent(MainActivity.this, MyService.class);
stopService(intent);
里面的服务,您可以覆盖onDestroy()
清理资源了。