マル開発日記

マルAndroidデベロッパ

Androidのサービス制限

 OreoでのAndroidサービス制限について、サンプルをGitHubに公開しています。
今回はJobIntentServiceを使ったデモを増やしてみました。JobIntentServiceならいつ起動してもいいんっすね。onStopJobがいつ駆動されるか恐怖はあるが。わけわからん。。

 
github.com

いつ駆動してもいいよって言うよりかいつJob積んでもいいよってことなんだろうけど、積んだJobはすぐに実行されるようです。IntentServiceのようにstartServiceではなくenqueueWorkなのでメソッド名から即実行のイメージはない。でもほとんどのServiceをJobServiceにしなさいってGoogleは言っているので、これは遅延なしでお願いって要求すればなるべく即実行される?のかな。

developers-jp.googleblog.com

Kotlin または Swift

 こんばんは、Kotlin使ってますか。なんかKotlinでiOSアプリが作れるようになるみたいですよ(技術は既にあるみたい)。
 一般的な話、アプリ開発ではAndroidはKotlin、iOSはSwiftという感じでそれぞれ異なる言語を使うと思います。なんでー、両方覚えるのめんどくさい、同じ言語でできたらいいのに。。と思っちゃうのもしょうがない。
 でも、KotlinとSwiftはターゲットとするOSが違いますので、それぞれ異なる思想、または癖があります。まぁメモリ管理関係なんですが。Swiftは参照型を嫌うので、これでAndroidアプリ作れって言われたら今までと同じようにできないでしょう。逆もまた然り。
 というわけで、うまい話ってそうないんじゃないかと思うんですが、ネガティブでしょうか。

いろんなプログラミング言語あるなぁ

 自分は結構なプログラミングオタクです。まぁ、もちろん自分よりずげーやつはいくらでもいると思いますが。
 で、実際のところ、業務で始めたのはVerilog-HDLなんですね。。これってプログラミング言語とは言わないかも(´・ω・)いろいろ回路作りました。
 でー、次にVBAとかJavaとかPythonをよく利用しました。デバドラとかは作ったことないのでCは苦手ですね。あと、ウェブ技術者でもないのにJavaScript。実際のところ、JScriptとしてWindows上での自動化処理のコード書いてました。JavaScriptはなかなか美しい言語です。
 それから、自前のサイトをWordPressで作ったんでPHPを勉強中。さらに機械学習とか勉強したいので、Pythonとか思い出してます。で、AndroidはKotlin!
 こんな感じ、世の中にはたくさんの言語があります。覚えるのも大変。。と思いきや、自分はそれらをいちいち覚えていません。全部おなじものです。そう思いこんでます。All for
One、One for All それで多分いけますよ!(ちょっと使い方違うかもw)。プログラミング言語なんてifとforぐらいしか無いじゃないですか。外国語覚えるほうがよっぽど難しい。。

。。でプログラミング初心者が一番最初に覚えたほうが良いと思う言語はやっぱりCかな。自分はあんま業務経験ないけど。やっぱプログラミング言語の考え方はここから派生していることが多いのかも。

GCP

 最近GCPに興味あります。AWSとかもまったくやったことない、ノークラウドな自分ですが。。
 あるイベントに出席したとき機械学習ライブラリの紹介などあって、とたんに興味をもち始めました。
 今の時代、AI関連の知識はどんどん一般常識化していきそう。じゃないと競争に負けていくだけな感じですよねー。
 そろばんで会計士やるようなもんです。。

Androidサービス

 みなさま如何お過ごしでしょうか。私は今日3連休?の代休をもらってちょっとしたコード書いてますw

 みなさまのお好きなバックグラウンドサービスはAndroid O (かつSDK26)でリストリクトされます。なのでサービスのフォアグラウンド化はいままで作ったサービスを生かしつつターゲットを26に上げる、ある一つの方法になってます。その辺がわかるよーなコードをGitHubに載せました。超簡単なサービスを扱っていますのでまったくの説明がないですが、コード(およびマニフェスト)より感じ取って頂けると幸いです。

 以上 よろしくお願いいたします。

github.com


。。いろいろ試して気づいたのですが、ひとつでもフォアグラウンドサービスが生きていれば他のバッググラウンドサービスは殺されないようです(Nexus5Xで試してます)。

 ということは、アクティビティ起動時にでもひとつダミーでスティッキーなフォアグラウンドサービスを立ち上げればその他のサービスは手を加えずそのままで良い??AlarmManagerからのサービス起動インテントもイリーガルステートエクセプション投げない?その辺の細かな説明はどっかでされてるんだろうか。。

10/22追記
どうやら、ダミーでフォアグラウンドサービスを起動しとけば、OreoでもAlarmManagerを今まで通りな感じで使えるよーです。JobSchedulerのほう推奨されてるけど。。検討中。

10/29追記
肉の日ですねー、GitHubのデモにJobSchedulerとJobDispatcherのデモを追加しました( ´∀` )b

通知チャンネル

 あまり盛り上がりを見せないAndroid O Oreo ( -д-)
どうやら通知チャンネルという新機能があるそうです。ユーザー側で通知設定をいろいろカスタマイズできるとのこと。優先度(通知がトップにでるかどうか)、音やバイブレーションなどをアプリごとに設定できるようです。
 例えば、マルマルブックの通知がちょっとうざいなーって感じたらその優先度を下げたり、お気に入りのアプリの通知を目立たせたいと思ったら音やバイブレーションを派手にしたりできるよーです。
 ただし、対象のアプリがAPI26をターゲットにしてないとだめでーす。API26をターゲットにすると、カッコいいフォントをアプリに設定したり、ピクチャーインピクチャーとかいう機能が使えたり良いこともあるけど、バックグラウンドサービスの制限など負の要素もあるので、なかなかメジャーアプリが対応してくれるかどうか。。微妙ですね。特にマルマルブックとかw

GitHub

GitHubリポジトリ更新しました。前のはデモがあまりにもカオスだったので。分かりやすくしました(*^-^)

Android Studio 2.3.3でプラグインとかライブラリとか最新にすればビルドできますはずです。

https://github.com/malta-yamato/gallery-fragment