Android 内存泄漏使用匿名 class 实现和特定于线程的局部变量
Android Memory Leak Using anonymous class implementation with local variables specific to thread
在我的应用程序中,我想在一个单独的地方执行特定任务thread.I想知道它会在哪里导致任何内存泄漏。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
runOnThread();
}
private void runOnThread() {
new Thread() {
private int value;
@Override
public void run() {
while (true) {
SystemClock.sleep(1000);
callotherfunction(value);
}
}
}.start();
}
}
那么这个实现是否会导致内存 leak.And 更重要的是,在线程中使用局部变量是否有害?线程中的局部变量是否会造成内存泄漏。
我不知道你的代码有什么问题,但如果你需要对其他 threads/background 进行操作,我建议你使用 AsynTask。
文档:https://developer.android.com/reference/android/os/AsyncTask.html
同时打开一个对话框并在操作结束时关闭的示例:
在你的class需要在后台进行操作的地方:
/** Create variable */
private Dialog dialog;
private LoadAsyn loadAsync;
/** Call the AsyncTask */
dialog = ProgressDialog.show(getActivity(), "", "Caricamento...", false, true);
dialog.setCancelable(false);
loadAsync = new LoadAsyn();
loadAsync.execute((Void) null);
这是定义 AsynTask 操作的 class:
/** Define AsyncTask Class */
public class LoadAsyn extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute(){}
@Override
protected void onProgressUpdate(Void[] values) {};
@Override
protected Boolean doInBackground(Void... params) {
//In this block all operation to do in background
return true;
}
@Override
protected void onPostExecute(final Boolean success) {
dialog.dismiss();
//Operation to do after execution
}
@Override
protected void onCancelled() {
loadCompAsync = null;
}
}
}
只要您的线程 运行ning,变量就会占用内存。如果您的线程从未停止和释放,那么它将继续占用内存。
只要您有一些使线程停止的退出条件,就可以了。当线程停止时,如果您没有引用它,它将被垃圾收集。
即使如此明确地创建线程也不是 android 中 运行 后台任务的推荐方式。请改用 AsyncTask,或查看 RxJava。
在我的应用程序中,我想在一个单独的地方执行特定任务thread.I想知道它会在哪里导致任何内存泄漏。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
runOnThread();
}
private void runOnThread() {
new Thread() {
private int value;
@Override
public void run() {
while (true) {
SystemClock.sleep(1000);
callotherfunction(value);
}
}
}.start();
}
}
那么这个实现是否会导致内存 leak.And 更重要的是,在线程中使用局部变量是否有害?线程中的局部变量是否会造成内存泄漏。
我不知道你的代码有什么问题,但如果你需要对其他 threads/background 进行操作,我建议你使用 AsynTask。
文档:https://developer.android.com/reference/android/os/AsyncTask.html
同时打开一个对话框并在操作结束时关闭的示例:
在你的class需要在后台进行操作的地方:
/** Create variable */
private Dialog dialog;
private LoadAsyn loadAsync;
/** Call the AsyncTask */
dialog = ProgressDialog.show(getActivity(), "", "Caricamento...", false, true);
dialog.setCancelable(false);
loadAsync = new LoadAsyn();
loadAsync.execute((Void) null);
这是定义 AsynTask 操作的 class:
/** Define AsyncTask Class */
public class LoadAsyn extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute(){}
@Override
protected void onProgressUpdate(Void[] values) {};
@Override
protected Boolean doInBackground(Void... params) {
//In this block all operation to do in background
return true;
}
@Override
protected void onPostExecute(final Boolean success) {
dialog.dismiss();
//Operation to do after execution
}
@Override
protected void onCancelled() {
loadCompAsync = null;
}
}
}
只要您的线程 运行ning,变量就会占用内存。如果您的线程从未停止和释放,那么它将继续占用内存。
只要您有一些使线程停止的退出条件,就可以了。当线程停止时,如果您没有引用它,它将被垃圾收集。
即使如此明确地创建线程也不是 android 中 运行 后台任务的推荐方式。请改用 AsyncTask,或查看 RxJava。