簡単な答え: スレッドは進行し続けます。GC に依存して停止することはできません。
詳細: 私の質問に対する十分な回答を得ることができませんでした (ただし、Alberto に感謝します)。私はこれを経験的に自分でテストすることにしました。次のテスト コードを使用します。
public class TestActivity extends Activity {
private ThreadContainer mtc;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mtc = new ThreadContainer();
}
public void btnFree_click(View view) {
Log.v("TestActivity","Free clicked");
mtc = null;
}
}
public class ThreadContainer {
private boolean go = true;
public ThreadContainer() {
new testThread().execute(1);
}
private class testThread extends AsyncTask<Integer,Integer,Integer> {
protected Integer doInBackground(Integer... arg0) {
while(go) {
Log.v("testThread","I'm running...");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// do nothing
}
}
return 0;
}
}
@Override
public void finalize() {
go = false;
}
}
logcat から次の出力を取得できました。
I/ActivityManager( 244): Displayed com.example.test/.TestActivity: +509ms
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/TestActivity(13728): Free clicked
D/dalvikvm( 512): GC_EXPLICIT freed 144K, 50% free 2891K/5767K, external 1685K/2133K, paused 164ms
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
D/dalvikvm(13449): GC_EXPLICIT freed 12K, 47% free 2894K/5379K, external 1685K/2133K, paused 94ms
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
V/testThread(13728): I'm running...
スレッドのタスクが完全にプライベートであり、コンテナー オブジェクトへの外部参照がなくなっているにもかかわらず、スレッドが停止していないことがわかります。