2015 04/25 DroidKaigi http://droidkaigi.github.io/

I'm working on my first Android app. I've got three activities in my app, and the user switches back and forth pretty frequently. I've also got a remote service, which handles a telnet connection. The apps need to bind to this service in order to send/receive telnet messages. Edit Thank you BDLS for your informative answer. I have re-written my code in light of your clarification on the difference
Tuesday, October 18, 2011 Android でのバックグラウンド処理 Androidでバックグランド処理を行うための手法がいくつかあるのでまとめてみた。 Androidでは用途や求めるユーザエクスペリエンスによってバックグラウンド処理のやり方が変わってくる。 大きく分けて、 スレッドを使う (Thread) 非同期タスクを使う (AsyncTask) サービスを使う (Service) レシーバを使う (BroadcastReceiver) といった感じなのだが、それぞれの特徴を上げてみる。 ※ NDKとIPC(Interprocess Communication) については触れない。 1.Thread 一番単純かもしれない。単なるスレッドであるが、UIに直接アクセスすることはできない。UIは単一のスレッドで管理されているのでそのスレッドに処理をdelega
ググればライフサイクルのフローチャートが出てくるだけど、念のため動作確認してみた。想定していたのと違う挙動をしたパターンがいくつかあった。 要点 unbind()せずにServiceは停止できない。 テストコード 基本的にはAIDLを使ったServiceを作ってるだけ。テスト内容に合わせてコメントアウトしたり。 ITestService.aidl package local.ServiceLifecycle; interface ITestService { int add(int x, int y); } TestService.java ログ取ってるだけですね。 package local.ServiceLifecycle; import android.app.Service; import android.content.Intent; import android.os.IBin
さて前回に引き続きServiceの実装を試してみます。 今回はServiceからのCallbackを利用出来る様にしてみたいと思います。 BackgroundでServiceを走らせておいて「音楽の再生が終わったよ」というようなServiceで行っていた処理に何らかのEventが発生したらActivityに通知したいというような時に使用できます。 今回、実現する機能はServiceからのCallbackをもとにTextViewに表示するStringをupdateするというものです。 実装の要点をまとめます Activity側 Activity用のAIDLにCallback interfaceを定義 ActivityにServiceからのCallbackを受け取るためのCallback interfaceを実装 ActivityにServiceとBindするContext#bindServi
まとめ方を検討しながら書いているので、まだ目次が確定していません。 Serviceとは IntentでServiceを使う IntentでServiceを起動する Intent起動したServiceを停止する Intent起動したServiceのライフサイクル Serviceがヌルポで落ちる 常駐の方法 Serviceとのデータのやり取り Serviceとのbindについて Binderクラスを拡張してServiceとbindする MessengerでServiceとbindする ADILでServiceとbindする 起動しているか確認する その他のノウハウ サービスがヌルポで落ちる!? Android:開発備忘録 Index ← 面白かったり、役に立ったらクリックしてちょんまげ Tags: Android Service, Androidアプリ開発, プログラミング Posted in
Androidで常駐型アプリケーションを作成する場合に便利なServiceについてライフサイクル・使い方を解説します。サービスの利用例はステータス通知(Notification)を変化させる等をご確認ください。Serviceを使う(1)では簡単化のため、Remote Messenger Serviceを次回以降として、LocalServiceに特化して解説します。 Serviceのライフサイクル onCreate / onStartCommand / onDestroyの3つの状態遷移 サービスの実行方法によってライフサイクルが異なる サービスの実行方法はContext#startServiceとContext#bindServiceの2種類 startService/stopService Service全般として実行中はServiceからActivityへIntentの発行が可能 サー
Serviceにはdumpメソッドが用意されています。 これは下記コマンドが実行された時に、サービスの状態をダンプするメソッドです。 $ adb shell dumpsys activity service <yourservicename> Service.dump http://developer.android.com/reference/android/app/Service.html#dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]) dumpメソッドにはPrintWriterインスタンスが引数として渡されます。 これにサービスの情報を入力すれば、ログとしてそれが出力されます。 ・動作サンプル $ adb shell dumpsys activity service yuki.test.mes
Androidでサービスを使ったアプリを作った事がある人なら分かるかと思いますが、「サービスを死なないようにする」、これがなかなか難しいです。 Developerサイトに説明されているサービスにライフサイクルによれば、サービスが死ぬ前にonDestroy()がコールされるのですが、これがコールされずに突然プロセスごと消滅することが多々あります。 例えば、フォアグランドで動いているアプリが大量にメモりを消費するとき。システムはメモリを確保するためにバックグラウンドのサービスを瞬殺します。悪・即・斬です(笑) また、軽い気持ちでインストールされてしまっているタスクキラーやメモリクリーン系のアプリが動いたとき。この時もサービスは悪・即・斬です(いや、悪ではないんですけどね) その他、サービスがなにも仕事をしない状態で放置しながらlogcatのログを眺めていると、以下のようなログがでることがありま
開始状態 startService()の呼び出しでサービスを開始すると、サービスは"開始状態"となります。 "開始状態"となったサービスは、システムからkillされるか明示的に終了しない限り停止しません。 バインド状態 bindService()を呼び出してサービスにバインドすると"バインド状態"となります。 バインドされたサービスは、バインドしたコンポーネントとの双方向通信やメッセージに よるやりとりを提供します。 "バインド状態"のサービスは全てのコンポーネントがらアンバインドされることで停止し ます。 開始+バインド状態 サービスがstartService()とbindService()両方で起動されると"開始状態"かつ "バインド状態"となります。 この状態のサービスは、両方の状態の停止条件を満たした場合に停止します。 つまり、全てのコンポーネントからアンバインドされてもstopS
How to able to run service applications on all OS versions ServiceクラスのonStartメソッドはdeprecated(非推奨)に指定され、Android2.1以降では使うべきではないメソッドになってしまいました。 実際にAndroid2.1以降ではonStartメソッドが呼ばれないことがあります。 代替メソッドとしてonStartCommandメソッドが用意されましたが、Android1.6にはonStartCommandメソッドがありません。 1.6以降のどのAndroidでも同じように動作するサービスアプリケーションを作るには、onStartメソッドとonStartCommandメソッドの両方を実装します。 1.6以降のAndroidに対応させるので、プロジェクトのBuild TargetはAndroid1.6(API
先週からずっとBatteryCrystalのバグ修正と戦っているのですが、 未だに収束していません!(>_<) バッテリー状態を見張るBroadcastReceiverを登録しているServiceがシステムに勝手に落とされるのがバグの原因と思っているのでそれをなんとかしようと色々と修正し、twitterでアプリの検証をしてくださる方を募ってテストしていただいているのですが、まだ直らず。今さっき出来たバージョンでたぶんいけると思うのですが、深夜なので、メールは朝させてもらおうと思ってます。 とりあえず、今までやったことを一覧にしておきます。 AlarmManagerを使って制御。 ただ、AlarmManager.setしたイベントがウィジェットを削除してもServiceを起動させてしまったため、断念(私のミス) ServiceのonDestroyのタイミングで、独自のBroadcastを投げ
プログラム中から特定のServiceが走っているかどうか確認する方法を説明します。 ちなみに端末上では「メニュー」→「設定」→「アプリケーション」→「実行中のサービス」で確認できます。 ActivityManagerから稼働中のサービスリストを取得し、特定文字列にマッチするサービス名があることを確認します。 ActivityManagerは、Context#getSystemService(Context.ACTIVITY_SERVICE)で取得します。 private static final String mServiceName = MyService.class.getCanonicalName(); private boolean isServiceRunning() { ActivityManager activityManager = (ActivityManager) g
jNTrainのウィジェット対応、結構時間がかかりました。 が、何とか必要最小限の機能は実装できたのでそろそろ公開したいなと思ってます。 この開発がひと段落着けばjWezの開発も始めたいところなので、備忘録としてウィジェット開発時の個人的なポイントをメモメモ。 Androidの基本的な開発に関してはググればいくらでも出てくるので助かるのですが、ビギナー向けなのか、スケルトンを動かしただけでOKとしているサイトも多く、ちょっと実践的な処理を行おうとすると詰まってしまうことも多かったのですね。 特にウィジェットの複数配置(でなおかつそれぞれ違う動作をさせたい場合)に関しては余り言及されてないような気がする。 ■ウィジェットの構成 ●AppWidgetProviderInfo ウィジェットのサイズ、レイアウトxmlの指定、更新間隔を定義しておく。 サイズ違いのウィジェットを複数作成したい場合はこ
Androidのサービスについて、ちょっと調べてみた。 サービス自身を、それを使うActivityと一緒のアプリケーションとして使うローカルサービスと別のアプリケーションとして動かすリモートサービスがあるようだが、今回はローカルサービスについて。 【補足:2010.09.17】 Remote Serviceについては“AndroidのRemote Serviceについて(+作り方)”にメモしておいた。(ただし、Service全般とLocal Serviceについてはここにメモしている。) Androidのページ:http://developer.android.com/intl/ja/reference/android/app/Service.htmlに詳しく書いてある。要点だけを私なりにまとめてみた。(といっても和訳らしきものになってしまったが、和訳するつもりではないので、内容の正確さは
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message お世話になっております、橋本です。現在、サービスを使ってAndroid端末が起動している間はずっと 裏で動き続けるアプリを作成しようとしています。 Intent.ACTION_BOOT_COMPLETED でサービスを開始 サービスのonDestoy()で再度、自身を起動 上記のやり方で、 「設定」-「アプリケーション」-「実行中のサービス」 から停止された場合には自動でサービスが起動することができる ようになりました。 しかし、 「設定」-「アプリケーション」-「アプリケーションの管理」 から「強制停止」された際にはサー
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く