¿Es este Runnable seguro de pérdida de memoria?

Soy un principiante total en Java y he creado un fragmento simple de Android de Java donde en un Runnable después de 1,5 segundos cambio elTextView deHello World aHola Mundo. Funciona perfectamente, básicamente unWeakReference debería evitar que ocurra esta pérdida de memoria, ¿verdad? Tengo una duda si no hay absolutamente ninguna pérdida de memoria cada vez que se produce la orientación del dispositivo. Me encantaría comprobar esto, pero no puedo cambiar la orientación en mi Android emulado.

Este es el código:

package com.example.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.util.Log;
import java.lang.ref.WeakReference;

public class HelloWorldActivity extends Activity
{
    private Handler h = new Handler();
    private static TextView txtview;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        txtview = (TextView) findViewById(R.id.mainview);

        h.postDelayed(new WeakRunnable(txtview),1500);
    }

    private static final class WeakRunnable implements Runnable {
        private final WeakReference<TextView> mtextview;

        protected WeakRunnable(TextView textview){
            mtextview = new WeakReference<TextView>(textview);
        }

            @Override
            public void run() {
                TextView textview = mtextview.get();
                if (textview != null) {
                    txtview.setText("Hola Mundo");
                    textview = null; // No idea if setting to null afterwards is a good idea
                }
                Log.d("com.example.helloworld", "" + textview);
            }
    }           

}

EDITAR

Está a salvo de pérdidas de memoria, pero algunas respuestas también estaban relacionadas con el bloqueo de subprocesos de la interfaz de usuario. De hecho, este código ejecuta el controlador en el subproceso principal (UI). Para generar un nuevo hilo, estoy generando un hilo manualmente de la siguiente manera:

package com.example.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.util.Log;
import java.lang.ref.WeakReference;

public class HelloWorldActivity extends Activity
{

    private static TextView txtview;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        txtview = (TextView) findViewById(R.id.mainview);

        Thread t = new Thread(new WeakRunnable(txtview));
        t.start();
    }

    private static final class WeakRunnable implements Runnable {
        private final WeakReference<TextView> mtextview;

        protected WeakRunnable(TextView textview){
            mtextview = new WeakReference<TextView>(textview);
        }

            @Override
            public void run() {
                TextView textview = mtextview.get();
                if (textview != null) {
                    /*
                    try {
                        Thread.sleep(1500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    */
                    txtview.setText("Hola Mundo");
                    textview = null;
                }
                Log.d("com.example.helloworld", "" + Thread.currentThread().getName()); // Outputs "Thread-<num>" if not running on UI thread
            }
    }           

}

El problema ahora es que parece que no puedo retrasar el hilo generado de ninguna manera, de lo contrario funciona.

Esta:

try {
    Thread.sleep(1500);
} catch (InterruptedException e) {
    e.printStackTrace();
}

hace que la aplicación se cierre sola y no entiendo por qué. Algo me dice que lo estoy retrasando por el camino equivocado.

EDIT2

Gracias al enlace @EugenMatynov dame:actualizar la interfaz de usuario desde otro hilo en Android Comprendí por qué la aplicación se cerró. Todo se reduce a la razónNo puede llamar a métodos de IU desde hilos distintos al hilo principal. y es una mala práctica actualizar la interfaz de usuario desde otro hilo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta