人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JAVA android についての質問です。
======================
MainActivity → SubActivity

と遷移するプログラムです。

MainaActivity内でスレッドAをたちあげます。

そのスレッドAは、どこかのネット上の情報をどんどん拾って蓄積していくスレッドとします。

その後、SubActivityに遷移して、スレッドAの情報をSubActivity上に表示する場合の、MainActivityからSubActivityスレッドの受け渡し方法がわかりません。

単純にSerializableしたスレッドAを、
intent.putExtraで吐き出して、SubActivityの方で getIntent().getSerializableExtra で受け取る。

のではうまくいかないようです。

皆さんは、どうしてあるでしょうか?

●質問者: zachouR
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● lang_and_engine
●50ポイント ベストアンサー

2つ方法があります。

(1)チョイ処理であれば,staticクラスに処理をさせます。
かりに,Activity1でMyStaticWorker.start()みたいなメソッドを呼び出して,そのメソッド内では独自スレッドの走る処理が始まったとしましょう。
Activity2に遷移したあと,MyStaticWorker.end()のように呼び出して
スレッド内での処理の結果をもらう事ができます。
コード量も少なくて済みます。


(2)staticクラスを使う方法は,アプリの構造上,あまり安全ではありません。
まじめにアクティビティをまたいで非同期処理を行なうためには,Serviceを使います。
これなら,画面が変わっても裏側でバッチ処理が動き続けますから,複数アクティビティから単一スレッドへのアクセスも安定して行なえます。ただしコード量は多くなります。


lang_and_engineさんのコメント
参考リンク: 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.(スレッドはあちこち運搬するものではない)

zachouRさんのコメント
ありがとうございました。 Service を実装してうまくいきました。 スレッドをあちこちで使おうとしていたのが、間違いでありました。

2 ● gizmo5
●50ポイント

Serializable なクラスであれば putExtra で Intent に落として、getSerializableExtra で取得できます。
http://d.hatena.ne.jp/hidecheck/20091008/1255023688

どのようにうまくいかないのかが分かりませんが、以下のような原因が考えられます。
・スレッドAが取得したデータをスレッドAのメンバに蓄積していない
・スレッドAが収集を完了する前にシリアライズしている


zachouRさんのコメント
おそらく、 スレッドAが収集を完了する前にシリアライズしている だと思われます。 ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ