Translate

BTemplates.com

Powered by Blogger.

2018年2月24日土曜日

2018-02-24 到達点メモ


時間を置くと実装方法を忘れてしまう・・・。
そういう訳で前にしたServiceの実装方法を再度調べる
以前のブログに記録こそは残っていたが肝心の実装方法はあまり載っていなかった
はぁ・・・。
2017-12-03 到達点メモ
2017-12-07、08 到達点メモ
2017-12-12,13 到達点メモ
2017-12-14、15、19~21、27 到達点メモ

そういう訳でサービスの作成の際は以下二つの内容を参考にした
[Android] Service の使い方
Androidで死なないServiceを実装してみた

忘れがちな事項としてKotlinで継承いわゆる
Javaでいうextendをやる場合は以下のように書けばよい
class AppMonitoringService : Service(){}

あと、どうもなんか思い込みか
Service=何度も起動し続けるみたいなイメージがある
定期的に処理したい場合はServiceの中でスレッドを作成しないといけない

アプリを落としても一秒ごとにログを吐き続けるサービスの作り方

1.MainActivityで以下のように宣言する
        val serviceIntent= Intent(applicationContext, AppMonitoringService::class.java)
        startService(serviceIntent)

2.AndroidManifest.xmlに<application>タグの中に<service android:name=".AppMonitoringService"/>を宣言する

3.Serviceのクラスで以下のように宣言する
class AppMonitoringService : Service(){
    val TAG:String = "AppMonitoringService"
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {

        val handlerThread = HandlerThread("other")
        handlerThread.start()
        val handler = Handler(handlerThread.looper)
        val runnable = object : Runnable {
            override fun run() {
                Log.d(TAG,"actingt!!")
                handler.postDelayed(this, 1000)
            }
        }
        handler.post(runnable)
        return START_STICKY//super.onStartCommand(intent, flags, startId)
    }

    override fun onBind(intent: Intent?): IBinder? {
        return  null
    }
}

以上。今回はサービスが生きてさえすれば
スリープによる停止は気にしなくてよいので
一先ずはこれで行けるのではないかと

あぁ、でも重くなるとサービスが削除される恐れがあるので
startForegroundはしないとまずいかもしれない。という訳で実装はした。

しかし、意外だったのはアプリを終了させると
どうやらサービスの方が生きていてもDeployGateでログが取れなくなるようである。
厳密には普通ログが取れない場合は、ログが取れないと出るところを
表示が変わらない状態になっていた。回避する方法があるのかもしれないが
少なくとも現段階での自分の設定ではそうだった。
ただ、AndroidStudioのほうではログが取れるので
なんだかんだ言って本当の意味でAndroidStudio無しでのテストは
まだ難しいのかもしれない。

あと、結構自分での意外な気付きだったのは
分からない作業は細かく分解すると案外難しくなさそうに見えることを実感した
最初は「アプリの常時を監視するサービスを作る」ぐらいだったタスクがあった。
そのタスクは今月いっぱいで終われる気がしなかった
しかし、以下のように分解したところ。見ての通り半分くらいは片付いた。
なお、これは今日の作業である。

項番 作業内容 優先度 実装状況
48 アプリの状態を常時監視するサービスのファイルを作成する 必須 作業済
52 serviceの作り方を確認する 必須 作業済
53 アプリが起動した際に立ち上がるサービスを作成する 必須 作業済
54 アプリが起動した際に立ち上がるサービスをログで確認する 必須 作業済
55 アプリが起動した際に一秒ごとにメッセージログを出すサービスを作成する 必須 作業済
56 アプリが起動した際に一秒ごとにメッセージログを出すサービスをログで確認する 必須 作業済
57 アプリが終了しても動き続ける機能を作成する。 必須 作業済
58 アプリが終了しても動き続ける機能をログで確認する 必須 作業済
59 現在アクティブになっているアプリを取得する機能を作成する 必須 未着手
60 現在アクティブになっているアプリを取得する機能をログで確認する 必須 未着手
61 特定のアクティビティが起動しているかを確認する機能を作成する 必須 未着手
62 特定のアクティビティが起動しているかを確認する機能を確認する 必須 未着手
63 特定のアクティビティが起動している時、別のアクティビティを立ち上げる機能を作成する 必須 未着手
64 特定のアクティビティが起動している時、別のアクティビティを立ち上げる機能が動くか確認する 必須 未着手

このように細かく分解したことでやることが明確になり
正直明日でも終わりそうな気がする。
国語の教科書で「困難は分割せよ」とあったがまさしくその通りだった。
最初に15分くらいかけて作ったかいがあった。
なお、これは最初からこう作れたわけではなく、途中で追加したタスクもある。
寧ろ詰まったらどんどん分解していくのがいいのかもしれない。

自分的には目的を達成したので今日はここまで。

0 コメント:

コメントを投稿