java—使用线程运行的后台应用程序

js4nwp54  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(352)

我正在编写一个应用程序,将发送短信时,设定的时间结束了。当我改变手机的方向或暂时离开此活动时,计时器仍在计时,但停止按钮不起作用,并且开始按钮可见。我不知道如何保存设置;我知道我必须使用 onSaveInstanceState 但我不知道该放什么进去。
代码:

public void startThread(View view) {

        stopThread = false;
        sum = sec + mins;
        if (sum == 0) {
            Toast.makeText(Background.this, "Please enter a positive number", Toast.LENGTH_SHORT).show();
            return;
        }
        ExampleRunnable runnable = new ExampleRunnable(sum);
        new Thread(runnable).start();
        btnStartThread.setEnabled(false);
    }

    public void stopThread(View view) {
        stopThread = true;
        btnStartThread.setEnabled(true);
    }

    class ExampleRunnable implements Runnable {
        int seconds;
        ExampleRunnable(int seconds) {
            this.seconds = seconds;
        }
        @Override
        public void run() {
            for (; ; ) {
                for (int i = 0; i < seconds; i++) {
                    if (stopThread) {
                        return;
                    }
                    if (i == sum-1) {

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                if(check_sms.isChecked() && edit_phone_number.length() > 0) {
                                    sendSMS();
                                }

                                }

                        });
                    }
                    Log.d(TAG, "startThread: " + i);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        }
jw5wzhpr

jw5wzhpr1#

我会坚持像“黑斯廷默斯开始”这样的旗帜,并设置它 true/false 根据计时器是否已启动,如果计时器确实已启动,我将保存一些其他标志,如“timerstartedepoch”(时间已启动时的历元数)、“timertimeoutms”(超时ms)。
这样,无论何时离开活动并返回活动,都可以加载标志并基于它们更新状态。

相关问题