質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

1212閲覧

アプリが隠れた隠れた時に、安全にthreadを使いたい

redhat98

総合スコア236

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/10/31 11:58

みなさん、こんにちは

ActivityからThreadを生成して、Httpを投げたいと思います。
HTTPを投げた後に、別のアプリへ切り替わったらばThreadはどのようになるのでしょうか?

Activity自体がなくなることは知っているのですが、Threadがどのようになるのかわかりません。
試しにコードを書いてみた所、Threadは死んでいませんでした。

ThreadからUIへアクセスが無いと仮定した場合、このThreadは安全なのでしょうか?

試しに書いたコードは、こんなコードです。

java

1@Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 6 new Thread(()->{ 7 for (;;) { 8 SystemClock.sleep(1000); // Activityが隠れたら、Uiにアクセスしない限りこのThreadは安全なのか? 9 Log.d(TAG, "onCreate"); 10 } 11 }).start(); 12 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

スレッド内でActivity#isFinishを使い、スレッドを終わらせるか、Threadのインスタンスをフィールド変数で参照を保持し、onPauseやonStopで止めてあげましょう。

投稿2016/10/31 12:14

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

redhat98

2016/10/31 12:29

回答有り難うございます。 つまり、アプリが隠れたときは、Threadを止めたほうがいいということですね?
yona

2016/10/31 12:45

止めるかどうかはあなた次第です。 一般的に言えば不要なスレッドは止めたほうが無難です。 また、ライフサイクルに沿ってバックグランドで何かをしたいならServiceを使ったり、AsyncTaskLoaderを使うべきだと思います。
redhat98

2016/10/31 13:01

httpで通信を投げた時、普通は1秒前後でレスポンスが帰ってくると思います。 しかし、たまにサーバの都合でレスポンスが30秒になることもあります。 そこで疑問に思うのが 1. 1秒前後で返ってくるレスポンスは、Activityが無いことをわざわざ考慮する必要があるのか? 2. 30秒くらいかかるレスポンスの場合は、Activityが破棄された時にThreadも死んでしまわないのか? → そもそも、ThreadをabortさせてもHttpのレスポンスを受け取る必要がないのでしょうか?
yona

2016/10/31 13:12

それはあなたのアプリの方針次第です。 レスポンスは重要でアプリ内で必ず処理しないといけないならスレッドは止めてはいけないし、そもそもスレッドではなくサービスで実装しないといけないです。 一方でレスポンスは重要ではなく、特になにもしないならスレッドを止めてレスポンスを無視してもいいし。 これは私に聞かれても回答のしようがありません。
redhat98

2016/10/31 13:27

わかりました。 ありがとうございます。
yona

2016/10/31 13:37

難しいところですが、後から深刻なエラーになるのでしっかりと方針を立てることをオススメします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問