Tokyo GTUG主催 Bootcamp 2010
Android:
Activity間の情報の受け渡し方
江川 崇(@t_egg/ egg)
自己紹介
       • 江川 崇(EGAWA Takashi)
         • プログラマー
        •   egg / @t_egg
        •   Android Developers’ Club(デ部)
        •   Android プログラミング入門
        •   IMoNiなど
今日お話ししたいこと

「Activity間の情報の受け渡し方」
今日お話ししたいこと

「Activity間の情報の受け渡し方」

たくさんありますが、今回はその中でも、なるべく簡
単にできる方法をご紹介します。

私も知らないことがたくさんありますし、皆さんと一
緒に理解を深めていきたいので、随時質問して下さ
い。
startActivity

public class A extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a);
    }
    public void click(View v) {
    Intent i = new Intent(this, B.class);
    startActivity(i);
    }
}
startActivity
layout/a.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/andr
oid"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     >
<Button
     android:id="@+id/button1"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="@string/button"
     android:onClick="click"
     />
</LinearLayout>
Can I ask?
•ボタンが押されたときに、clickメソッ
ドが呼ばれます。紐付けはどこで?

•startActivityが呼ばれると何が起き
ますか?
Can I ask?
•ボタンが押されたときに、clickメソッ
ドが呼ばれます。紐付けはどこで?
           android:onClick

•startActivityが呼ばれると何が起き
ますか?
   指定されたActivityが最前面に来る
             ※ Activityを選択するDialogが出るか、Activityが
                      見つからずにエラーになるケースもある
startActivity
こう変えたらどうなる?
public class A extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a);
    }
    public void click(View v) {
       Intent i = new Intent(Intent.ACTION_VIEW,
              Uri.parse("http://www.google.com/"));
       startActivity(i);
    }
}
Intent

• An intent is an abstract description of an
  operation to be performed.
• 「Intentとは実行される操作の抽象的な単位です。」
  ▫ 一つのアクティビティ内のウィジェットやイベントは単
    一のスレッドで実行される
  ▫ Handlerドリブン、Looperでのループ
  ▫ でも、そうとは限らないので、画面遷移をはじめとする
    あらゆるコンポーネント間連携を隠ぺいする(開発者
    が楽になり、繋がりやすくなる)
ComponentName

• private ComponentName mComponent;
 ▫ インテントの宛先のこと

 ▫ 明示的なインテント(Explicit Intents)
    Intent(Context packageContext, Class cls)や、
     setComponentメソッドなどによって、そのインテントを取り扱う
     コンポーネントを「明示的」に指定されたもの
    宛先を特定する情報は他には要らない
 ▫ 暗黙的なインテント(Implicit Intents)
    宛先のコンポーネントを指定されていないもの
    そのIntentを動かすにあたってどのコンポーネントが最適であ
     るかを決定するための十分な情報が必要
Can I ask?
•呼び出したActivityから戻るときは?


•呼び出したActivityから結果を受け
取るときは?
Can I ask?
•呼び出したActivityから戻るときは?
                    finish

•呼び出したActivityから結果を受け
取るときは?
        startActivityForResult
                     setResult
              onActivityResult
startActivityForResult
public class A extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a);
    }
    public void click(View v) {
       Intent i = new Intent(this, B.class);
       startActivityForResult(i, 0);
    }
   @Override
   protected void onActivityResult(int requestCode, int
   resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       ・・・
   }
}
startActivityForResult

あくまでも例ですが。
public class B extends Activity {
    ・・・
    @Override
    protected void onPause() {
        super.onPause();
        setResult(10);
        finish();
    }
}
Can I ask?
•複数画面にまたがるときはどうやって
受け渡す?(such as A -> B -> C)
Can I ask?
•複数画面にまたがるときはどうやって
受け渡す?(such as A -> B -> C)

    startActivityResultの数珠つなぎ
                        ほか、色々.
                いくつかご紹介します
static
•staticな入れ物(クラス変数)に入れ
ておけばいい
public class A extends Activity {
    static int val;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a);
    }
    public void click(View v) {
        System.out.println(++val);
    }
}
Can I ask?
•気を付けるべきことは?
Can I ask?
•気を付けるべきことは?
     アプリの終了ではなくプロ
     セスが死ぬまで覚えている

             同期化されない

             など、他にも実はいろいろです。
android.app.Application
 •Activity   ≒ 画面                        (短命)
 •Appication ≒ アプリ                       (長寿)
public class MyApplication extends Application {
       public String val;
}
android.app.Application
•AndroidManifest.xml
<application android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:name=".MyApplication">
    <activity android:name=".A"
          android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category
       android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <activity android:name=".B"
          android:label="@string/app_name">
    </activity>
</application>
Can I ask?
•気を付けるべきことは?
Can I ask?
•気を付けるべきことは?
     アプリを終了したら忘れる

             別プロセスは別アプリイン
             スタンス

                       など
ファイルに保存
•android.context.Context

•abstract FileInputStream openFileInput(String name)
Open a private file associated with this Context's application package for
reading.

•abstract FileOutputStream openFileOutput(String name, int mode)
Open a private file associated with this Context's application package for
writing.


•普通にjava.ioでもできます。(アクセスできる場所なら)
キャッシュ
•android.context.Context#

   getCacheDir()
•public abstract File getCacheDir ()
Returns the absolute path to the
application specific cache directory on the
filesystem.
Can I ask?
•気を付けるべきことは?
Can I ask?
•気を付けるべきことは?
    キャッシュは消えるかも
    同期化など
    デカくし過ぎると迷惑
    アンインストールしたら忘れる

                など
SharedPreferences
•KEY,VALUE
•アプリごとのデータ領域に置かれる

Context context = getApplicationContext();
SharedPreferences pref = (SharedPreferences)
       PreferenceManager.getDefaultSharedPreferences(context);

// 読む場合
String val1 = pref.getString("KEY_1", "");
int val2 = pref.getInt("KEY_2", -1);

// 書く場合
pref.edit().putBoolean("KEY_3", true).commit();
Can I ask?
•気を付けるべきことは?
Can I ask?
•気を付けるべきことは?
     デカくなると遅くなる(XML)
     複数プロセスからのアクセ
     スは同期化されない
Note: currently this class does not support use
across multiple processes. This will be added later.


                                              など
【参考】他のアプリのContextを取る
 •foo.barアプリの、あるアクティビティで保存
getSharedPreferences("HOGEHOGE", MODE_WORLD_READABLE |
MODE_WORLD_WRITEABLE).edit().putInt("value", 10).commit();



 •別のアプリから、foo.barアプリのContextを取る
Context otherAppContext = null;
try {
  otherAppContext = createPackageContext("foo.bar",
                                Context.MODE_WORLD_READABLE);
} catch (NameNotFoundException e) {
}
Context context = otherAppContext.getSharedPreferences("HOGEGOGE", 0);
その他の方法(一例)
•Serviceで管理する

•別アプリに覚えさせておく

•端末の外に覚えさせておく
  •DropboxのようなストレージでもいいしApp Engineなどでもいい
  •同期例:Sample Sync Adapter(development/samples/SampleSyncAdapter/)


•SQLiteに記録する

•ContentProviderに置く
  •独自で公開してもよいし、ギャラリーの画像のExifデータに
  置く( #uso800

More Related Content

PDF
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
PDF
Djangoフレームワークの紹介
KEY
Google App Engine for Java
PDF
Djangoフレームワークのユーザーモデルと認証
PPTX
かんたん Twitter アプリをつくろう
PDF
Paging Libraryの利用をやめたいお気持ち表明
PDF
Jetpack datastore入門
PDF
GrailsでSpringをGroovyにしよう!
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
Djangoフレームワークの紹介
Google App Engine for Java
Djangoフレームワークのユーザーモデルと認証
かんたん Twitter アプリをつくろう
Paging Libraryの利用をやめたいお気持ち表明
Jetpack datastore入門
GrailsでSpringをGroovyにしよう!

What's hot (19)

PDF
Djangoフレームワークの紹介
PPTX
TDC20111031_Groovy_Geb
PDF
Layout analyzerでのgroovyの利用について
PDF
明日から使えるgradle
PDF
Djangoによるスマホアプリバックエンドの実装
PDF
Android Lecture #03 @PRO&BSC Inc.
PDF
最強オブジェクト指向言語 JavaScript 再入門!
PPTX
20160526 依存関係逆転の原則
PDF
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
PDF
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
PDF
株式会社インタースペース 清水様 登壇資料
PDF
AsyncTask アンチパターン
PDF
5分でわかったつもりになるParse.com
PPTX
Reladomo入門 JJUGナイトセミナー #jjug
PDF
JavaScriptの落とし穴
PPT
2005 11 29_template_customize_seminer_04
PDF
Elasticsearch勉強会#44 20210624
PDF
社内Git勉強会向け資料
PPT
G*workshop sendai 20100424(v2)
Djangoフレームワークの紹介
TDC20111031_Groovy_Geb
Layout analyzerでのgroovyの利用について
明日から使えるgradle
Djangoによるスマホアプリバックエンドの実装
Android Lecture #03 @PRO&BSC Inc.
最強オブジェクト指向言語 JavaScript 再入門!
20160526 依存関係逆転の原則
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
株式会社インタースペース 清水様 登壇資料
AsyncTask アンチパターン
5分でわかったつもりになるParse.com
Reladomo入門 JJUGナイトセミナー #jjug
JavaScriptの落とし穴
2005 11 29_template_customize_seminer_04
Elasticsearch勉強会#44 20210624
社内Git勉強会向け資料
G*workshop sendai 20100424(v2)
Ad

Viewers also liked (12)

KEY
Clouds
PPT
Coalicion Antioquia
PDF
20130507 BYOD i skolen (nkul 2013)
PPT
Avaliku sektori võimalused kaugtöö edendamisel
DOCX
Bios
PDF
Cube3Studio 2100 Highland Drive
PPTX
Arqu hardware 03 - microprocesadores intel (63170)
PDF
IMoNi 2010.06.26
PDF
Office Building Concepts
PDF
ECSU Student Housing - Ken Cooper AIA
PDF
Mebic Creative Business Forum 2013
PDF
Python hackathon 2010. 07. 10
Clouds
Coalicion Antioquia
20130507 BYOD i skolen (nkul 2013)
Avaliku sektori võimalused kaugtöö edendamisel
Bios
Cube3Studio 2100 Highland Drive
Arqu hardware 03 - microprocesadores intel (63170)
IMoNi 2010.06.26
Office Building Concepts
ECSU Student Housing - Ken Cooper AIA
Mebic Creative Business Forum 2013
Python hackathon 2010. 07. 10
Ad

Similar to Tokyo GTUG Bootcamp2010 (20)

PDF
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
KEY
おいしいFragment #antama_ws
PPT
Mixiアプリで体験する Open Social
PDF
Android Lecture #01 @PRO&BSC Inc.
PDF
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
PPTX
学生向けAndroid勉強会(入門編)
PDF
0621 ndk game
PDF
AOZORAYOMITE and Intent
PDF
AndroidでDIxAOP
PPT
Titanium Mobile
PDF
Google Apps Scirpt勉強会 #1
PDF
Twitter sphere of #twitter4j #twtr_hack
PDF
Android4.2徹底解剖!
PDF
Android Lecture #02 @PRO&BSC Inc.
PDF
FridaによるAndroidアプリの動的解析とフッキングの基礎
PDF
データマイニング+WEB勉強会資料第6回
PDF
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
PDF
20110714 j queryベーシック
KEY
GroovyなAndroidテスト #atest_hack
PDF
Jqm20120804 publish
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
おいしいFragment #antama_ws
Mixiアプリで体験する Open Social
Android Lecture #01 @PRO&BSC Inc.
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
学生向けAndroid勉強会(入門編)
0621 ndk game
AOZORAYOMITE and Intent
AndroidでDIxAOP
Titanium Mobile
Google Apps Scirpt勉強会 #1
Twitter sphere of #twitter4j #twtr_hack
Android4.2徹底解剖!
Android Lecture #02 @PRO&BSC Inc.
FridaによるAndroidアプリの動的解析とフッキングの基礎
データマイニング+WEB勉強会資料第6回
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
20110714 j queryベーシック
GroovyなAndroidテスト #atest_hack
Jqm20120804 publish

Tokyo GTUG Bootcamp2010