0

まず、手動でスレッドを作成することはありません。

私は私のAndroidアプリのスレッドを監視することができます:

これらのスレッドがどの要素に関連しているかをどのように知ることができますか?

たとえば、すべてのhttpXXスレッドまたはAsyncTask #Xは、コード内のどこで作成されているかを知る方法はありますか?彼らはいつもそこにいて、私は記憶を漏らすのが怖いからです。

反対に、スレッドに画像をロードするImageCacheがあります。これらのスレッドは、画像を表示するビューにいるときにリストに表示され、アプリを閉じると消えます。

httpX、AsyncTask #X、WebViewWorkerThreadなどアプリを閉じても消えないでください。だから、どこでメモリを解放したり、接続を閉じたりできるのか知りたいのですが

4

1 に答える 1

1

このスレッドは、スレッドプールに内部的に依存するAndroidクラスによって作成されます。スレッドプールの主なアイデアは、何かをする必要があるたびに新しいスレッドを作成するのではなく、すでに開始されているスレッドを再利用して、現在作業がない場合でもスレッドを実行し続けることです。

たとえば、AsyncTask #XスレッドはAsyncTaskinternalによって作成されThreadPoolExecutorます。ソースコードを調べると、次のThreadFactoryに気付くでしょう。

private static final ThreadFactory sThreadFactory = new ThreadFactory() {
    private final AtomicInteger mCount = new AtomicInteger(1);

    public Thread newThread(Runnable r) {
        return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
    }
};

WebViewCoreThread、、WebViewWorkerThreadおよびhttp0-http11は内部ワーカースレッドでWebViewあり、ネットワークを介したhtmlデータのロード、処理などに関するすべての操作をに代わって実行しWebViewます。

したがって、このスレッドはすべてAndroidシステムによって管理されており、何もする必要はありません。また、アプリを閉じても消えないのは問題ありません。

于 2012-07-15T23:32:15.253 に答える