トップ «前の日記(2013-05-27) 最新 次の日記(2013-06-16)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|

2013-06-09 [Android]アクティビティの表示

iOSアプリケーションは伝統的なUnixアプリケーションだが、Androidは独特だ。

アクティビティを簡単に説明すると画面という事になるのだが、システムのアクティビティマネージャによって開かれた画面はスタック構造で管理され、WebブラウザのBackボタンのように、前のアクティビティに戻る動きをする。
Linuxのプロセスとアプリケーションのライフサイクルは等号でなく、プロセスはアクティビティを入れる容器にすぎない。

アクティビティには、launchModeという開かれた際の挙動を定義する項目があり、これには以下の4つの種類がある。

LaunchModeandroid:launchMode起動タスクインスタンス化
standardmultiple呼び出し元タスク追加
singleTopsingleTop呼び出し元タスク対象アクティビティが最上位でない場合は追加。その他は再利用。
singleTasksingleTask新規タスク既存インスタンスの再利用。
singleInstancesingleInstance新規タスク追加

アクティビティが呼び出し元タスクに属する事に驚いたが、同一アプリケーション内部の場合に限定すると、あるアクティビティを開くインテントを実行した際に、とにかく開く要求が発生したら、その度に、ある画面を出したい場合はstandardを、そのアクティビティが開かれていた場合は新規に画面を開きたくない場合は、simgleTopをというのが良さそうだ。

実は、あるアプリケーションを作っていて、それはアプリ内のサービスから、通知経由で、そのアプリをフロントに移動させるという動きをさせたいのだが、フロントに移動する度にアクティビティが追加されて困っていた為、調査していた。

この問題そのものについて、Android関連のMLで答えを教えてもらったので、それも紹介しよう。

同一アプリで、あるアクティビティを開く場合は、以下のようにインテントを記述すると思うが、

Intent intent = new Intent(this, アクティビティ名.class);
startActivity(intent);

この時に以下の設定を追加すればいい。

intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

質問の場を設けてくれた日本Androidの会の皆さん、ありがとうございます。助かりました!

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

トップ «前の日記(2013-05-27) 最新 次の日記(2013-06-16)» 編集