JAVA android についての質問です。

======================
MainActivity → SubActivity

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

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

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

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

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

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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/02/26 15:37:19
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:language_and_engineering No.1

回答回数170ベストアンサー獲得回数63

ポイント50pt

2つ方法があります。

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


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

id:language_and_engineering

参考リンク:

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.(スレッドはあちこち運搬するものではない)

2014/02/24 19:11:44
id:zachouR

ありがとうございました。

Service を実装してうまくいきました。
スレッドをあちこちで使おうとしていたのが、間違いでありました。

2014/02/26 15:37:07

その他の回答1件)

id:language_and_engineering No.1

回答回数170ベストアンサー獲得回数63ここでベストアンサー

ポイント50pt

2つ方法があります。

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


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

id:language_and_engineering

参考リンク:

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.(スレッドはあちこち運搬するものではない)

2014/02/24 19:11:44
id:zachouR

ありがとうございました。

Service を実装してうまくいきました。
スレッドをあちこちで使おうとしていたのが、間違いでありました。

2014/02/26 15:37:07
id:gizmo5 No.2

回答回数504ベストアンサー獲得回数141

ポイント50pt

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

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

id:zachouR

おそらく、

スレッドAが収集を完了する前にシリアライズしている

だと思われます。

ありがとうございました。

2014/02/26 15:36:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません