質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

3505閲覧

android serviceの適切な終了処理の仕方

yokoi

総合スコア18

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2017/05/01 01:37

久しぶりに質問させていただきます。今serviceを使ってバックグラウンドで通知をする処理を実装している最中です。ですが、カウントダウンしている途中にアプリを一度落とすとそれ以降作動しなくなります。

java

1public class backGroundTimer extends Service { 2 3 private Handler handler = new Handler(); 4 private Runnable run; 5 private int count = 0; 6 NotificationManagerCompat manager; 7 8 @Override 9 public void onCreate() { 10 super.onCreate(); 11 } 12 13 @Override 14 public int onStartCommand(Intent intent, int flags, int startId) { 15 16 17 18 run = new Runnable() { 19 @Override 20 public void run() { 21 handler.removeCallbacks(run); 22 handler.postDelayed(run, 1000); 23 count++; 24 if(count == 5) { 25 sendNotification(); 26 stopSelf(); 27 } 28 } 29 }; 30 handler.postDelayed(run,1000); 31 return super.onStartCommand(intent, flags, startId); 32 } 33 34 35 @Override 36 public void onDestroy() { 37 super.onDestroy(); 38 manager.cancel(0); 39 stopSelf(); 40 } 41 42 private void sendNotification() { 43 Intent intent = new Intent(this,MainActivity.class); 44 PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); 45 46 manager = NotificationManagerCompat.from(this); 47 Notification notification = new NotificationCompat.Builder(this) 48 .setAutoCancel(true) 49 .setContentTitle("タイトル") 50 .setContentText("コメント") 51 .setSmallIcon(R.mipmap.icon) 52 .setContentIntent(pendingIntent) 53 .setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE) 54 .build(); 55 manager.notify(1, notification); 56 } 57 58 @Override 59 public IBinder onBind(Intent intent) { 60 return null; 61 } 62} 63

必要ない部分は省きました。このようなコードになっております。MainActivityでButtonをクリックすることでこのサービスをスタートさせています。その後5秒間カウントし、5秒後に通知を呼び出しています。普通に動かしている分にはなにも異常はないのですが、5秒間のカウントしている最中にこのアプリを落とすとそれ以降正常に作動しなくなります。OnDestroy()の中で途中でも終了させるようにする処理を書けばいいのかと思い、Stopself()をいれてみたのですが変わりませんでした。雑な説明で申し訳ないのですがアドバイスのほどよろしくお願いしますm(-_-)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

sendNotificationの先頭にログ出力を追加して、「5秒間のカウントしている最中にこのアプリを落とす」を行なってください。

投稿2017/05/01 02:56

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yokoi

2017/05/01 04:22

言われた通りにやってみたところ、ログは出力されませんでした。
yona

2017/05/01 04:29

次はrunの先頭にログ出力を追加して同じことをやってください。
yokoi

2017/05/01 04:37

アプリを落とした時点でログ出力が止まりました。 あと、やってみて気づいたことがあります。アプリを落とさずに通常通りにやってみましたが、5秒間たってもrunのログ出力は続いたままでした。何となく原因は何か分かったような気がしましたが具体的に何をすればいいのか分かりません。もう少しだけ協力お願いします。
yona

2017/05/01 06:21

countが5の時はpostDelayedはしたらダメですね。
yokoi

2017/05/01 08:08

無駄なrunの働きはしなくなりましたが、やはりアプリを落としてから正常に動かないままです。>< いろいろ試してみます...
yokoi

2017/05/01 08:52

ondestroy()のところにいじっていたら何とかうまくいきました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問