Androidで課金アプリ作製 プロセス間通信予習編
Androidで課金アプリ作製 プロセス間通予習編
課金アプリを作成の際にaidlファイルを利用するにあたって曖昧な部分を解消する為に自分なりに調べた記録。
プロセス間通信のソースコードには触れません。今回はざっくり理解出来ればと思います。
シリーズ
・Androidで課金アプリ作製 サンプルコード(BILLING V3) 起動編
・Androidで課金アプリ作製 プロセス間通信予習編
・Androidで課金アプリ作製 定期購読サンプルコード編
開発、動作環境
Eclipse Juno Service Release 2
Android 4.1.2 SC-06D
sample code TRIVIAL DRIVE – SAMPLE FOR IN-APP BILLING VERSION 3
In-app Billing Version 3
OS Windows7
予備知識
・aidl
Android インターフェイス定義言語 ( AIDL )
プロセス間通信を行う為に必要な処理らしいのですが、ちょっとばかりとっつきにくいです。
ざっくり言えばプロセス間のデータアクセスは出来ないのでそこの橋渡しをする役割との事ですが。。。
・LogCat
デバッグログを表示する
OSはUbuntuですが、ログ出力の方法は同じなのでこの当たりが参考になるかと
※外部リンク
プロセスについて
そもそもプロセスとは何かをおさらい。
プロセス
※wiki
簡単に纏めると実行中のプログラムの管理番号のようなもの。
先ずは確認用アプリを作成。
・新規プロジェクト作成
ここでは名前をProcessで作成。
パッケージ名はcom.example.process
・MainActivityにログ出力を追加
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("process_app", "main activity"); ← 追加 }
プロセスIDの確認
作製したアプリを起動すしLogCatでログを確認するとPIDに番号が割り当てられてるのが確認出来ます。
実行結果
※環境によってプロセスIDは変化します。
次にサブアクティビティを用意しメインアクティビティから呼び出した場合の挙動を調査します。
・subActivity.javaを用意しMainActivityからサブアクティビティを呼び出す記述を追加
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("process_app", "main activity"); Intent intent = new Intent(this, subActivity.class); ← 追加 startActivity(intent); ← 追加 }
・subActivityにログ出力を追加
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("process_app", "sub activity"); ← 追加 }
変更したら起動しログの確認を行います。
同一のプロセスと確認出来ます。ついでにスレッドID(TID)も同一の物が確認出来ます。
実行結果
アクティビティ間で値渡しを何気なくしてますが、これは同一のプロセス間だからと言う事が確認出来ます。
別スレッドを立てても値渡しが出来るのも、同じ理由からだと考えられます。
・スレッドを生成した場合
subActivityにスレッド処理を追加
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("process_app", "sub activity"); threadStart(); ← 追加 } // スレッド処理追加 public void threadStart() { new Thread(new Runnable() { public void run() { Log.d("process_app", "sub activity thread"); } }).start(); }
実行結果
スレッドを作製した場合はTIDが変わりますが、同じPIDなのか確認出来ます。
まとめ
ログは一部出力しかしてませんが、他にも多くのプロセス(アプリやサービス)が動き、PIDが割り振られてます。
この中のサービスの一つMarketBillingService(Androidマーケットアプリケーションと通信するサービス)を使用する事によって課金の実装の手間が省ける。
プロセス間通信にはアクセスの制限があるので、これを解消するのがaidl(プロセス間通信を行う為の言語)。
今まで簡単なアプリの作成しかしてこなかったので実際にプロセスIDが同じなのか気にしてませんでしたが、今回の検証で実証出来ました。
aidlファイルの中身に関しては今はブラックボックスとしておきます。。。
次回
関連記事
-
Macで ローカルサーバー構築 Postfix基本編
Macで ローカルサーバー環境を構築するまで Apache起動編 ネットでの情報は必要最低限しか載
-
Google Cloud Messaging プロジェクトナンバー API Key取得編 2014/07最新版
Google Cloud Messaging プロジェクトナンバー APK取得編 コンソールの仕様
-
C言語 バッファオーバーランまで ポインタ考察編
趣旨 ただC言語を勉強してもモチベーションがあがり辛いので、 取り合えずバッファオーバーランを目
-
Apache 500 Internal Server Error
久しぶりに自宅のローカルサーバーを動かしたら「Server error!」が出てゑっ!? 解決方法
-
Macで ローカルサーバー構築 ローカルネットワーク参加編
Macで ローカルサーバー環境を構築するまで Apache設定編 ネットでの情報は必要最低限しか載
-
Macで ローカルサーバー構築 Apache起動編
Macで ローカルサーバー環境を構築するまで Apache起動編 ネットでの情報は必要最低限しか載
-
jQuery removeClass 特定のクラスを全て削除
特定のクラスを全て削除 フォームを作成した時に、入力項目に不備があった場合は目立つ様にinput属
-
PHP MySQL 重複行を抽出 ロジックで高速化
PHP MySQL 重複行を抽出 ロジックで高速化 ロジックで高速化は釣りになっているかもしれませ
-
Macで ローカルサーバー構築 Apache設定編
Macで ローカルサーバー環境を構築するまで Apache設定編 ネットでの情報は必要最低限しか載
-
Androidで課金アプリ作製 エラー編(-1008:Unknown error)
Androidで課金アプリ作製 エラー編 In-app Billing v3を使用したアプリ開発で