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

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

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

  1. public void startThread(View view) {
  2. stopThread = false;
  3. sum = sec + mins;
  4. if (sum == 0) {
  5. Toast.makeText(Background.this, "Please enter a positive number", Toast.LENGTH_SHORT).show();
  6. return;
  7. }
  8. ExampleRunnable runnable = new ExampleRunnable(sum);
  9. new Thread(runnable).start();
  10. btnStartThread.setEnabled(false);
  11. }
  12. public void stopThread(View view) {
  13. stopThread = true;
  14. btnStartThread.setEnabled(true);
  15. }
  16. class ExampleRunnable implements Runnable {
  17. int seconds;
  18. ExampleRunnable(int seconds) {
  19. this.seconds = seconds;
  20. }
  21. @Override
  22. public void run() {
  23. for (; ; ) {
  24. for (int i = 0; i < seconds; i++) {
  25. if (stopThread) {
  26. return;
  27. }
  28. if (i == sum-1) {
  29. runOnUiThread(new Runnable() {
  30. @Override
  31. public void run() {
  32. if(check_sms.isChecked() && edit_phone_number.length() > 0) {
  33. sendSMS();
  34. }
  35. }
  36. });
  37. }
  38. Log.d(TAG, "startThread: " + i);
  39. try {
  40. Thread.sleep(1000);
  41. } catch (InterruptedException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  46. }
  47. }
jw5wzhpr

jw5wzhpr1#

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

相关问题