*

Androidで課金アプリ作製 プロセス間通信予習編

公開日: : 最終更新日:2014/04/05 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に番号が割り当てられてるのが確認出来ます。
実行結果
process_log
※環境によってプロセス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)も同一の物が確認出来ます。
実行結果
process_log2
アクティビティ間で値渡しを何気なくしてますが、これは同一のプロセス間だからと言う事が確認出来ます。
別スレッドを立てても値渡しが出来るのも、同じ理由からだと考えられます。

・スレッドを生成した場合
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();
	}

実行結果
process_log3
スレッドを作製した場合はTIDが変わりますが、同じPIDなのか確認出来ます。

まとめ

ログは一部出力しかしてませんが、他にも多くのプロセス(アプリやサービス)が動き、PIDが割り振られてます。
この中のサービスの一つMarketBillingService(Androidマーケットアプリケーションと通信するサービス)を使用する事によって課金の実装の手間が省ける。
プロセス間通信にはアクセスの制限があるので、これを解消するのがaidl(プロセス間通信を行う為の言語)。

今まで簡単なアプリの作成しかしてこなかったので実際にプロセスIDが同じなのか気にしてませんでしたが、今回の検証で実証出来ました。
aidlファイルの中身に関しては今はブラックボックスとしておきます。。。

次回

Androidで課金アプリ作製 定期購読サンプルコード編

関連記事

Androidで課金アプリ作製 エラー編(-1008:Unknown error)

Androidで課金アプリ作製 エラー編 In-app Billing v3を使用したアプリ開発で

記事を読む

PHP MySQL 重複行を抽出 ロジックで高速化

PHP MySQL 重複行を抽出 ロジックで高速化 ロジックで高速化は釣りになっているかもしれませ

記事を読む

Macで ローカルサーバー構築 Apache設定編

Macで ローカルサーバー環境を構築するまで Apache設定編 ネットでの情報は必要最低限しか載

記事を読む

C言語 バッファオーバーランまで ポインタ考察編

趣旨 ただC言語を勉強してもモチベーションがあがり辛いので、 取り合えずバッファオーバーランを目

記事を読む

jQuery removeClass 特定のクラスを全て削除

特定のクラスを全て削除 フォームを作成した時に、入力項目に不備があった場合は目立つ様にinput属

記事を読む

Macで ローカルサーバー構築 Apache起動編

Macで ローカルサーバー環境を構築するまで Apache起動編 ネットでの情報は必要最低限しか載

記事を読む

jQuery Google画像検索風プラグイン

Google画像検索風プラグイン rc_gallery_open こういったプラグインは数多の開

記事を読む

jQuery draggable,resizable 要素のサイズがずれる

uiプロパティ以外で要素のサイズ取得を試みる draggableとresizableを使用し要素の

記事を読む

PHP substr エスケープ処理で文字化け

PHP substr 文字化け mb_substrで文字コードを合わせて切り取ればOKって記事は沢

記事を読む

jQuery 要素の相対位置

jQueryを使って要素の相対位置を調べる Google先生に「jquery offsetLeft

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

jQuery 水平スクロール&cssでカスタム可能なスクロールバーなプラグイン

水平スクロール&cssでカスタム可能なスクロールバーなプラグイン j

C言語 バッファオーバーランまで 関数の引数ポインタ

関数引数としてのポインタ 今回は関数引数としてのポインタに関して。

C言語 バッファオーバーランまで ポインタ考察編

趣旨 ただC言語を勉強してもモチベーションがあがり辛いので、 取り

Google Cloud Messaging プロジェクトナンバー API Key取得編 2014/07最新版

Google Cloud Messaging プロジェクトナンバー A

jQuery removeClass 特定のクラスを全て削除

特定のクラスを全て削除 フォームを作成した時に、入力項目に不備があっ

→もっと見る

PAGE TOP ↑