======================
MainActivity → SubActivity
と遷移するプログラムです。
MainaActivity内でスレッドAをたちあげます。
そのスレッドAは、どこかのネット上の情報をどんどん拾って蓄積していくスレッドとします。
その後、SubActivityに遷移して、スレッドAの情報をSubActivity上に表示する場合の、MainActivityからSubActivityスレッドの受け渡し方法がわかりません。
単純にSerializableしたスレッドAを、
intent.putExtraで吐き出して、SubActivityの方で getIntent().getSerializableExtra で受け取る。
のではうまくいかないようです。
皆さんは、どうしてあるでしょうか?
2つ方法があります。
(1)チョイ処理であれば,staticクラスに処理をさせます。
かりに,Activity1でMyStaticWorker.start()みたいなメソッドを呼び出して,そのメソッド内では独自スレッドの走る処理が始まったとしましょう。
Activity2に遷移したあと,MyStaticWorker.end()のように呼び出して
スレッド内での処理の結果をもらう事ができます。
コード量も少なくて済みます。
(2)staticクラスを使う方法は,アプリの構造上,あまり安全ではありません。
まじめにアクティビティをまたいで非同期処理を行なうためには,Serviceを使います。
これなら,画面が変わっても裏側でバッチ処理が動き続けますから,複数アクティビティから単一スレッドへのアクセスも安定して行なえます。ただしコード量は多くなります。
2つ方法があります。
(1)チョイ処理であれば,staticクラスに処理をさせます。
かりに,Activity1でMyStaticWorker.start()みたいなメソッドを呼び出して,そのメソッド内では独自スレッドの走る処理が始まったとしましょう。
Activity2に遷移したあと,MyStaticWorker.end()のように呼び出して
スレッド内での処理の結果をもらう事ができます。
コード量も少なくて済みます。
(2)staticクラスを使う方法は,アプリの構造上,あまり安全ではありません。
まじめにアクティビティをまたいで非同期処理を行なうためには,Serviceを使います。
これなら,画面が変わっても裏側でバッチ処理が動き続けますから,複数アクティビティから単一スレッドへのアクセスも安定して行なえます。ただしコード量は多くなります。
参考リンク:
http://stackoverflow.com/questions/20048459/why-i-cannot-send-android-intent-from-within-new-thread
>If you want your thread independent from Activities,... just use regular Service (独自スレッドをアクティビティから独立させたいなら,サービスを使え)
>it will be much simplier and better than trying to pass Thread here and there.(スレッドはあちこち運搬するものではない)
ありがとうございました。
Service を実装してうまくいきました。
スレッドをあちこちで使おうとしていたのが、間違いでありました。
Serializable なクラスであれば putExtra で Intent に落として、getSerializableExtra で取得できます。
http://d.hatena.ne.jp/hidecheck/20091008/1255023688
どのようにうまくいかないのかが分かりませんが、以下のような原因が考えられます。
・スレッドAが取得したデータをスレッドAのメンバに蓄積していない
・スレッドAが収集を完了する前にシリアライズしている
おそらく、
スレッドAが収集を完了する前にシリアライズしている
だと思われます。
ありがとうございました。
参考リンク:
2014/02/24 19:11:44http://stackoverflow.com/questions/20048459/why-i-cannot-send-android-intent-from-within-new-thread
>If you want your thread independent from Activities,... just use regular Service (独自スレッドをアクティビティから独立させたいなら,サービスを使え)
>it will be much simplier and better than trying to pass Thread here and there.(スレッドはあちこち運搬するものではない)
ありがとうございました。
2014/02/26 15:37:07Service を実装してうまくいきました。
スレッドをあちこちで使おうとしていたのが、間違いでありました。