Android中的暂停/睡眠线程或进程

Android中的暂停/睡眠线程或进程,android,memory-leaks,handler,Android,Memory Leaks,Handler,我认为这个解决方案不会导致内存泄漏。根据得票最多的答案(),这将导致内存泄漏。您认为如何?为了避免内存泄漏,处理程序需要对活动进行弱引用。你可以这样做 protected void onCreate(Bundle savedInstanceState) {` super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.

我认为这个解决方案不会导致内存泄漏。根据得票最多的答案(),这将导致内存泄漏。您认为如何?

为了避免内存泄漏,处理程序需要对活动进行弱引用。你可以这样做

protected void onCreate(Bundle savedInstanceState) {`
super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = (Button) findViewById(R.id.test_button);
    button.setText("before");
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            button.setText("after");
        }
    }, 2000);
}
私有静态类MyHandler扩展处理程序{}
私有最终MyHandler mHandler=新MyHandler();
公共静态类MyRunnable实现Runnable{

private final WeakReference

尝试链接问题答案中的其他解决方案
private static class MyHandler extends Handler {}
private final MyHandler mHandler = new MyHandler();

public static class MyRunnable implements Runnable {
private final WeakReference<Activity> mActivity;

public MyRunnable(Activity activity) {
    mActivity = new WeakReference<>(activity);
}

@Override
public void run() {
    Activity activity = mActivity.get();
    if (activity != null) {
        Button btn = (Button) activity.findViewById(R.id.button);
        btn.setBackgroundResource(R.drawable.defaultcard);
    }
}
}

private MyRunnable mRunnable = new MyRunnable(this);

public void onClick(View view) {
  my_button.setBackgroundResource(R.drawable.icon);

  // Execute the Runnable in 2 seconds
  mHandler.postDelayed(mRunnable, 2000);
}