intentとtaskについて[Android]
詰まったので簡単にメモ。
特に"タスクの一番初めにスタックされたActivity起動インテント"について。
"タスクの一番はじめにスタックされたActivityを呼び出すインテント" ... とは?
ex 1) アプリ未起動の際にアプリ一覧からアプリを起動した際のインテント
ex 2) Google play booksなどの、別のタスクとしてActivityを起動するインテント
(参考)
本題
本題にして結論
"タスクが空になった後にタスク一覧からタスクを選択"すると、"タスクのはじめにスタックされたActivityを起動するインテント"が実行される
以下のようなアプリを作成して確かめて見た。
左上のボタンを押下すると、"適当な文字列をExtraに詰め込んだIntent"をActivityにsetしてfinish()する。
また、このアプリは特定のスキームに対応しているため、以下のコマンドで暗黙的インテント起動が可能
adb shell am start -d "yuta://hoge"
このアプリを
- アプリ一覧から起動→ボタン押下→タスク一覧からタスク選択
- 暗黙的インテント起動→ボタン押下→タスク一覧からタスク選択
した時に、ActivityにどのようなIntentが設定されているかを確認した。
アプリ一覧から起動→ボタン押下→タスク一覧からタスク選択
アプリ一覧から起動した時のインテントは以下
D/MainActivity: intent : Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.yutan.intentandactivitysample/.MainActivity bnds=[24,239][230,517] (has extras) }
D/MainActivity: extra : Bundle[mParcelledData.dataSize=148]
finish()後、タスク一覧から起動した際のインテントは以下
D/MainActivity: intent : Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10300000 cmp=com.example.yutan.intentandactivitysample/.MainActivity (has extras) }
D/MainActivity: extra : Bundle[mParcelledData.dataSize=148]
"適当な文字列をExtraに詰め込んだIntent"ではなく、LaunchのIntentがActivityに設定されている。
暗黙的インテント起動→ボタン押下→タスク一覧からタスク選択
D/MainActivity: intent : Intent { dat=yuta://hoge flg=0x10000000 cmp=com.example.yutan.intentandactivitysample/.MainActivity }
D/MainActivity: extra : null
finish()後、タスク一覧から起動した際のインテントは以下
D/MainActivity: intent : Intent { dat=yuta://hoge flg=0x10100000 cmp=com.example.yutan.intentandactivitysample/.MainActivity }
D/MainActivity: extra : null
やっぱり同じ結果。
最初は"finish()を行っても、プロセスが多少生きてるからでは?"と思ったのだが、System.exit()でVMを停止しても、Device Monitorでプロセスを消しても同じ結果だったことを考えると、OS管轄なのかな。。
setIntentでもクリアできないとなると、特定の手順を踏むと、予想外に2回同じ手順を踏むこともありそうだなぁ。。。。
今回のアプリ
備考 :
タスクについてはAndroid Developerで以下のように書かれている
あと、yanzmさんの記事がめちゃんこわかりやすい。
iOSアプリケーション[Objective-C]入門
Objective-CでのiOSアプリ開発をするために勉強したことをつらつらとリンク貼ります。。。
Objective-C難しい。。
- Hello world
- カウントアップアプリの作成
- slider機能の実装
- AVPlayerでの動画再生アプリ
- AVPlayerでの動画再生アプリ(background再生対応)
- 。。。
(※以後追加予定)
WSGIを使用したウェブアプリケーション1[python]
お久しぶりです。
世間はすっかりGWだということで、時間もできたし少しPythonを再び書き始めました。
今回は、Webアプリケーションとサーバー間のインターフェースをPythonで定義した
WSGI(Web Server Gateway Interface)を勉強したのでメモ。
[リンク] Web Server Gateway Interface - Wikipedia
まずは超基本
gistaf2a9b9ebcb5d19b290fe339e900e2a9
statusとheaderを定義して返却するapplicationを定義して、8080ポートで待機するWSGIサーバーを作成しました。
次はhtmlを表示します。
gist0bfccba1ff92f4535e626fc96ab0949a
headerを修正して、application内でhtmlを返却してあげればok
ちなみに返却する際にリストを返却している理由は、WSGIの規約として「返り値はリスト型でなければならない」とされているからです。
(※str型でもエラーにはなりませんが、WSGI内部でstr型を一文字づつのリスト化されるそうです。)
urlparse ライブラリを使用すれば、クエリパラメタも取得可能です。
20.16. urlparse — URL を解析して構成要素にする — Python 2.7.13 ドキュメント
gist3a082ab0be38eb70c27a228082f56e2d
年月日のurlクエリパラメタを与えると、その日の曜日を出力するアプリケーションです。
以下のようなurlに対して曜日を表示してくれます。
とりあえずここまで。
話は変わるけど、gitHubにあげたcommitをgistとしてはてブロに紹介する手段はないのか知らん。
Android iOSアプリについて
apk : android用のアプリケーションファイルの拡張子
開発環境 : Android SDK
SDKには、PCと実機をUSBで接続して、アプリをインストールしたり、実行できる機能が提供されている(adb)
主にAndroid Studio,eclipseで開発されている。
言語は、Android java (ほぼjava)(他にもC , Scala, C#..)
ビルドツールとして、Gradleを使用する。
(これがまためちゃくちゃ便利。
ビルド時に、簡単なコードの切り替えを行いたい場合なんかはめちゃくちゃ楽に行えます。)
android は、いろいろな会社からいろいろな端末が出ているため、VM(仮想マシン)インスタンス上でアプリを動かせるような仕組みになっている。
アプリを端末へインストールする方法。
- Google Playを経由してインストール
- Android SDKを用いたPCからのインストール
- apkファイルから直接インストール(どっかのサーバーにおきDLする。)
ipa : iOS用のアプリケーションファイルの拡張子
開発環境 : xcode
Xcodeでコードの作成、編集、デバッグまで行うことが可能。
ビルドツールとして、distccを使用する(らしい。。?)
Xcodeを使用していると、基本コンパイラやビルドツールは意識しないと思います。
(それよりも、証明書関連の方が問題になりがちかな。。?)
プロビあたりの説明は後日できたらと思っております!
言語は、objective -c , swift
アプリを端末へインストールする方法。
とりあえずこんなものですかね。。もー少し追記していきたいなぁ。
(参考にさせていただいた方のブログとか)
間違ってたらガンガン指摘をいただけたら、まだ勉強して3ヶ月程度なので。。。
それでは。
眠い。。。