質問編集履歴

2

質問の詳細の追加

2017/10/19 18:31

投稿

giant
giant

スコア132

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,21 @@
1
+ 想定している流れは、コンセントからスマホが抜かれた時にGPSの機能を持ったServiceをonにして、コンセントに接続された時には、接続されてから24時間後にGPSのserviceをoffにしたいと考えています。
2
+
3
+
4
+
5
+ そこで、なんどもコンセントから抜き差しを行った場合に、24時間のタイマーを複数起動することになってしまい、最後に発行したRunnableだけ実行したいなと思っています。
6
+
7
+
8
+
9
+ そこで、24時間が立たない限りは、一つRunnableを追加するごとに、前回のHandlerを取得して、handler.removeCallbacks(showMessageTask);
10
+
11
+ で、実行を行わないようにしたいと考えています。
12
+
13
+ しかし、24時間後には、コンセントを抜き差ししたぶんだけのRunnableが呼び出されてしまいました。
14
+
15
+ すでに発行してしまったRunnableを取り消す方法を教えていただけないでしょうか?
16
+
17
+
18
+
1
19
  下のコードの流れを説明しています。
2
20
 
3
21
  ```java

1

説明の追加

2017/10/19 18:31

投稿

giant
giant

スコア132

test CHANGED
@@ -1 +1 @@
1
- handler.removeCallbacks(showMessageTask);でhandlerの予約を削除したい
1
+ shandler.removeCallbacks(showMessageTask);でhandlerの予約を削除したい
test CHANGED
@@ -1,12 +1,40 @@
1
- コードに接続さてから30秒後に、GPS機能持ったServiceをオフにす。
1
+ 下のコードの流れを説明す。
2
2
 
3
+ ```java
4
+
5
+ handler.postDelayed(showMessageTask, 30000);
6
+
3
- なんども抜き差されたに、30秒タイマーをなんども発行るのは嫌なので重なて発行されぶんは
7
+ //このコードで指定ている間の30秒以内に、電源抜き差し(掲示したコ呼び出トリガー)を2回行った時点で
8
+
9
+
10
+
11
+ }else if(aaa>=2){ 
12
+
13
+ //の中に入って、このコードが呼び出されます。
14
+
15
+ handler.postDelayed(showMessageTask, 30000);
16
+
17
+
18
+
19
+ //30000ms後に
20
+
21
+ public void run() {
22
+
23
+ //が呼び出されるまでは、トリガーを引いたぶんだけ その都度その都度 
4
24
 
5
25
  handler.removeCallbacks(showMessageTask);
6
26
 
7
- で消去したいのですが、できません。
27
+ //このコードによって、過に呼び出そうとした
8
28
 
29
+ run()
30
+
31
+ //が取り消されると考えていたのですが、2回以上トリガーを引いたぶんだけ、run()が呼び出されてしまいます。
32
+
33
+
34
+
9
- どうすばいいのでしょうか?
35
+ //最後に呼び出さたrunだけを指定した時間30秒後に行うことはきるのでしょうか?
36
+
37
+ ```
10
38
 
11
39
 
12
40