この新しいThread()がAndroidでGCされるのはいつですか?

トムテイラー:

私は安全な設定に書き込もうとしているutilクラスを持っています、

public static void putIntInSS(final ContentResolver resolver, final String key,
                                                    final int value) {
      new Thread(new Runnable() {
             @Override
             public void run() {
                 Settings.Secure.putInt(resolver, key, value);
             }
         }).start();
}

これnew Thread()はいつGCされますか?new Thread()代わりに私のアプリケーションで使用するの良いHandlerですか?このようにスレッドを使用することに不利な点がある場合、それらは何ですか?

greeble31:

スレッドは、完了するとすぐにGCの候補になります。こちらをご覧ください

「ハンドラーの代わりにアプリケーションでnew Thread()を使用するのは良いですか?」

つまり、「いいえ」。プロダクションコードに追加のスレッドを配置する前に、マルチスレッドのメリットとデメリット、および適切な同時実行技術をすべて理解しておく必要があります。Handler特にメッセージ駆動型のUIベースのアプリ(Android、Windows)の場合、メッセージベースのキューイングシステム(例:)の優雅さを誇張するのは困難です。A Handlerは、単一スレッドのスループットに制限されている場合でも、並行性の錯覚を作成する効果的な方法です。

「この方法でスレッドを使用することのいくつかの欠点...」

まあ、たくさんあります。私は先に進み、リストを開始します:

  • この方法で実行される操作が特定の順序で実行される保証はありません。
  • 運用がタイムリーに開始される保証はありません。
  • スレッドの作成/スケジューリングに関連するオーバーヘッド、およびコンテキストの切り替えにより、実際には操作の実行が遅くなる可能性があります

このような多くの操作を短時間で開始すると、上記の問題は深刻になります。さらに:

  • 操作が終了したかどうか(またはいつ終了したか)を知ることはできません。(これには追加のコードが必要です。)特に、「outer」メソッドに渡されたオブジェクトを使用する場合、「outer」メソッドが戻るまでにスレッドがそれらのオブジェクトを使用して完了しているとは限りません。
  • この手法によりコードの複雑さが増します。あなたはそれがどれほど冗長であるかを見ることができます。
  • 別のスレッドで行う操作では、並行性に適切な注意を払う必要があります。同時アクセスの可能性がある場合は、呼び出すメソッドがスレッドセーフであることを確認する必要があります。詳細な同期作業が必要になる場合があります。
  • エラー処理は複雑になります。

ソフトウェアエンジニアリングの多くは、不要な複雑さを回避する方法に関するものです。物事をシンプルに保つ。場合によっては、パフォーマンス要件が厳しいことがあります。これらのプロジェクトでは、CPUがどのように機能するかを注意深く計画し、詳細に理解する必要があります。ほとんどの場合、ソフトウェアについて最も重要なことは、それが正しいことです。そのため、シングルスレッドを維持する方が簡単です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

関数で新しいDate()が実行されるのはいつですか?

分類Dev

フルGCがトリガーされるのはいつですか

分類Dev

GC_CONCURRENTがいつどこで呼び出されるか?

分類Dev

この文字列に新しい行が作成されないのはなぜですか?長すぎますか?

分類Dev

新しいキーが押されるまでこの四角形を動かし続けるにはどうすればよいですか?

分類Dev

このクエリが2つ表示されるはずなのに、1つの結果しか表示されないのはなぜですか?

分類Dev

Outlook 2016+ が新しい「外観」への変更をしつこくしないようにするにはどうすればよいですか?

分類Dev

新しい値が割り当てられずにこの参照が変更されたのはなぜですか?

分類Dev

lua_newuserdataも使用している場合、C ++でlua_gcを呼び出すことができるのはいつですか

分類Dev

このリンクリストに新しいノードが追加されないのはなぜですか?

分類Dev

AndroidルームでallowMainThreadQueries()を使用しないことが推奨されるのはなぜですか?

分類Dev

GC.Collectを呼び出すことができるのはいつですか?

分類Dev

GC.Collectを呼び出すことができるのはいつですか?

分類Dev

bindActionCreatorsがreact / reduxで使用されるのはいつですか?

分類Dev

Reactで状態が更新されるのはいつですか

分類Dev

PersistentVolumesがkubernetesで削除されるのはいつですか?

分類Dev

doFirstがgradleで実行されるのはいつですか

分類Dev

++ cおよびc ++の増分がここで正確に適用されるのはいつですか?

分類Dev

Firebaseで同時接続の制限が100に達した後、新しい接続が許可されるのはいつですか?

分類Dev

EFでの最初のクエリ中の長い遅延-これは、新しいクエリが実行されるたびに発生しますか?

分類Dev

EFでの最初のクエリ中の長い遅延-これは、新しいクエリが実行されるたびに発生しますか?

分類Dev

1つの条件分岐が基本クラスから継承されている場合、このSFINAEがenable_ifで機能しないのはなぜですか?

分類Dev

翻訳される新しい文字列が次のリリースのLaunchpadで利用可能になるのはいつですか?

分類Dev

翻訳される新しい文字列が次のリリースのLaunchpadで利用可能になるのはいつですか?

分類Dev

次のgoroutineが実行されるのはいつですか?

分類Dev

出力が新しい変数で表示されないのはなぜですか?

分類Dev

リストの値が新しい値で上書きされているのはなぜですか?

分類Dev

異なるMethodInfosの2つのRuntimeMethodHandlesが等しいと比較されるのはいつですか?

分類Dev

2つのパッチがgitで等しいと見なされるのはいつですか?

Related 関連記事

  1. 1

    関数で新しいDate()が実行されるのはいつですか?

  2. 2

    フルGCがトリガーされるのはいつですか

  3. 3

    GC_CONCURRENTがいつどこで呼び出されるか?

  4. 4

    この文字列に新しい行が作成されないのはなぜですか?長すぎますか?

  5. 5

    新しいキーが押されるまでこの四角形を動かし続けるにはどうすればよいですか?

  6. 6

    このクエリが2つ表示されるはずなのに、1つの結果しか表示されないのはなぜですか?

  7. 7

    Outlook 2016+ が新しい「外観」への変更をしつこくしないようにするにはどうすればよいですか?

  8. 8

    新しい値が割り当てられずにこの参照が変更されたのはなぜですか?

  9. 9

    lua_newuserdataも使用している場合、C ++でlua_gcを呼び出すことができるのはいつですか

  10. 10

    このリンクリストに新しいノードが追加されないのはなぜですか?

  11. 11

    AndroidルームでallowMainThreadQueries()を使用しないことが推奨されるのはなぜですか?

  12. 12

    GC.Collectを呼び出すことができるのはいつですか?

  13. 13

    GC.Collectを呼び出すことができるのはいつですか?

  14. 14

    bindActionCreatorsがreact / reduxで使用されるのはいつですか?

  15. 15

    Reactで状態が更新されるのはいつですか

  16. 16

    PersistentVolumesがkubernetesで削除されるのはいつですか?

  17. 17

    doFirstがgradleで実行されるのはいつですか

  18. 18

    ++ cおよびc ++の増分がここで正確に適用されるのはいつですか?

  19. 19

    Firebaseで同時接続の制限が100に達した後、新しい接続が許可されるのはいつですか?

  20. 20

    EFでの最初のクエリ中の長い遅延-これは、新しいクエリが実行されるたびに発生しますか?

  21. 21

    EFでの最初のクエリ中の長い遅延-これは、新しいクエリが実行されるたびに発生しますか?

  22. 22

    1つの条件分岐が基本クラスから継承されている場合、このSFINAEがenable_ifで機能しないのはなぜですか?

  23. 23

    翻訳される新しい文字列が次のリリースのLaunchpadで利用可能になるのはいつですか?

  24. 24

    翻訳される新しい文字列が次のリリースのLaunchpadで利用可能になるのはいつですか?

  25. 25

    次のgoroutineが実行されるのはいつですか?

  26. 26

    出力が新しい変数で表示されないのはなぜですか?

  27. 27

    リストの値が新しい値で上書きされているのはなぜですか?

  28. 28

    異なるMethodInfosの2つのRuntimeMethodHandlesが等しいと比較されるのはいつですか?

  29. 29

    2つのパッチがgitで等しいと見なされるのはいつですか?

ホットタグ

アーカイブ