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。