Android開発の基礎_20101218

  • 4,042 views
Uploaded on

2010/12/18 スパイシーソフトさんで開かれた勉強会「スパイシーカレッジ」での資料です。

2010/12/18 スパイシーソフトさんで開かれた勉強会「スパイシーカレッジ」での資料です。

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,042
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
53
Comments
0
Likes
8

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • 端末には本当に予測もつかない自体がよく起こるので、\n忘れがちなので一覧をチェックしておくことがお勧め\n
  • 日本語訳すると意図・意志\n\n\n
  • \n
  • 次から各コンポーネントの詳細\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • ここまでがライフサイクルの説明\n次は別Activityの起動について\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 音楽サービスでは、たとえばPHONE_STATEやMEDIA_REMOVEなどを使う。\nこれを受けないとどういうことが起こるかというと、電話がかかってきてもバックグラウンドのサービスによる音楽再生は続けられてしまう。電話がかかってきたらBroadcastReceiverで検知して、Serviceに対して停止命令を出す、という処理が必要。(同様に電話が終わったら、再開命令を出す)\n
  • onReceiveの間しか生存期間がないので、さっき説明したServiceにbindするような非同期処理は行うことができない。Serviceとは、お互いIntentでやり取りするなど工夫する必要がある。\n
  • \n
  • \n
  • 1個目は電話がかかってきたBroadcastを受ける\n2個目は音楽ファイルデータに対してのIntentを受けられることを示す。これを書いておくと、たとえばGmailでの添付ファイルで音楽ファイルが選択された際とかにアプリケーション候補一覧に表示される。\n3個目はブラウザで特定のスキーマ名、ホスト名、パスのリンクを押されたときに、候補一覧に表示させるためのフィルタ。httpでなくても独自スキーマも定義できる。\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • OSのバージョンで処理を切り分けることができるので2.1や2.2の新機能はフルに使った方がよい。Flash,マルチタッチ,C2DM,ライブ壁紙,HTML5など。またAPIによっては大幅な変更がある場合もあるので注意。たとえば連絡先など。\n
  • UXの向上にチューニングは絶対必要な作業\n200ms応答がなければそれはもうジャンクなアプリ\n\n
  • \n\n
  • 実際にアプリケーションを開発してみて、基本的な構成要素の理解が非常に重要かと思った。\nandroid developersにも開発の基礎というページがあって、それを読むと今日説明した内容がさらに深く分かると思う。\nアプリ間やコンポーネント間の柔軟な連携は、Androidならではの仕組みでとても面白い。\n今日説明して内容は膨大にあって、たとえばUI・チューニング・テストは重要。\n

Transcript

  • 1. Android @thorikawa
  • 2. Soft ware Engineer, MTI Ltd. android apps “music.jp”Blog: http://d.hatena.ne.jp/thorikawa/FiremobileSimulator http://firemobilesimulator.org/ (iPhone/iPad app)t witter: @thorikawa
  • 3. Android Activity Service BroadcastReceiver Intent ContentProvider
  • 4. Activity Activity
  • 5. Service
  • 6. BroadcastReceiver SD
  • 7. Intent Activity,Ser vice,BroadcastReceiver URI
  • 8. ContentProvider
  • 9. actionUser Activity Content Provider Service Intent BroadcastReceiverEvent
  • 10. Activity
  • 11. onCreate() xml Intent
  • 12. onStart()
  • 13. onResume() Activity
  • 14. onPause() Activity
  • 15. onStop()
  • 16. onDestroy() MediaPlayer.release() WebView.destroy()
  • 17. ActivityIntentActivity.startActivity()Activity.startActivityForResult()
  • 18. 1 = 1 Activity
  • 19. Service
  • 20. 2Context.startSer vice() Ser viceIntentContext.bindSer vice() Ser vice RPC
  • 21. startService() vs bindSer vice() + RPC startSer vice() Intent bindService() bind RPC
  • 22. startService() Ser vice.onStart() Intent
  • 23. bindService() bind bind Ser vice
  • 24. Broadcast Receiver
  • 25. Intent actiononReceive() (Intent) onReceive()
  • 26. android.intent.action.PHONE_STATEandroid.intent.action.BOOT_COMPLETEDandroid.intent.action.TIMEZONE_CHANGEDandroid.intent.action.MEDIA_REMOVED
  • 27. App Widget BroadcastReceiveronReceive() onReceive()
  • 28. Intent
  • 29. Intent Intent Intent Activity Intent Activity
  • 30. AndroidManifeset.xml Intent Filter Intent<intent-filter> <action android:name="android.intent.action.PHONE_STATE" /></intent-filter><intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:mimeType="audio/*" /></intent-filter><intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:host="example.com" /></intent-filter>
  • 31. Content Provider
  • 32. Content Uri(content:/ / / URL)
  • 33. query update SQLite insert delete etc... Client File Content Provider ex)ActivityInternet
  • 34. content://media/ MediaProvider content://media/external/images/ media content://media/external/images/ media/1
  • 35. ContentProvider ContentResolver
  • 36. Uri imagesUri = Images.Media.getContentUri("external"); Cursor cursor = getContentResolver().query( imagesUri, // Content Uri new String[] { ImageColumns.TITLE }, // null, // null, // null // ); while(cursor.moveToNext()) { ... } corsor.close();
  • 37. ContentProviderContentProvider
  • 38. public class MyContentProvider extends ContentProvider { @Override public boolean onCreate() { // ... } @Override public Uri insert(Uri uri, ContentValues values) { ... } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { ... } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { ... } @Override public String getType(Uri uri) { // Content Uri ... } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { ... } @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { // ... }}
  • 39. AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="a.b.c" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="x"> <provider android:name=".MyContentProvider"android:authorities="hoge" /> </application> <uses-sdk android:minSdkVersion="4" /></manifest> content://hoge/ MyContentProvider
  • 40. My App Mail App action: Intent.ACTION_SEND extra: EXTRA_STREAM=content:/ /hoge/1 IntentActivity Activity query openFile Content Provider authorities="hoge"
  • 41. ActivityActivity
  • 42. Android Activity, Service, BroadcastReceiver, Intent, ContentProviderIntent ContentProvider