如何正常关闭所有活动,并关闭所有正在运行的线程在一个Android应用程序?

问题描述 投票:-1回答:1

此刻,在我的每一项活动的我有这样的方法:

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();
}

它继续发出请求,即使我想我应该退出,这将导致在服务器上的错误。

我怎样才能确保所有的线程停止正常和应用程序以正确的方式倒闭?

java android multithreading threadpool terminate
1个回答
1
投票

你可以wrapthe投票代码Service内。该服务然后可以停止使用

Intent intent = new Intent(MainActivity.this, MyService.class); 
stopService(intent);  

里面的服务,您可以覆盖onDestroy()清理资源了。

© www.soinside.com 2019 - 2024. All rights reserved.