質問編集履歴
2
質問の詳細の追加
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
説明の追加
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
handler.removeCallbacks(showMessageTask);でhandlerの予約を削除したい
|
1
|
+
shandler.removeCallbacks(showMessageTask);でhandlerの予約を削除したい
|
test
CHANGED
@@ -1,12 +1,40 @@
|
|
1
|
-
コード
|
1
|
+
下のコードの流れを説明しています。
|
2
2
|
|
3
|
+
```java
|
4
|
+
|
5
|
+
handler.postDelayed(showMessageTask, 30000);
|
6
|
+
|
3
|
-
|
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
|
|