Obtener instancia de actividad

Disculpe por la simple pregunta, soy completamente novato java y desarrollador android. ¿Cómo puedo obtener la instancia de Activity en setCameraDisplayOrientation cuando se llama a surfaceChanged?

public class MyActivity extends Activity { private Camera mCamera; private CameraPreview mPreview; public final int cameraId = 0; public Activity activity = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); activity = this; // Create an instance of Camera mCamera = getCameraInstance(); // Create our Preview view and set it as the content of our activity. mPreview = new CameraPreview(this, mCamera); FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); preview.addView(mPreview); } public void setCameraDisplayOrientation(Activity activity, int cameraId, android.hardware.Camera camera) { } public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mHolder; private Camera mCamera; ... public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { ... setCameraDisplayOrientation(activity, cameraId, mCamera); .... } } } 

Esta es una manera de evitar pérdidas de memoria mediante la variable estática: hacer referencia estática débil a la instancia de actividad que se establecerá en el método onCreate (Bundle).

  1. Escriba en su clase secundaria algo como a continuación:

     public Class SecondClass { private static WeakReference<Activity> mActivityRef; public static void updateActivity(Activity activity) { mActivityRef = new WeakReference<Activity>(activity); } 
  2. Luego, en el método onCreate (Bundle) de su clase de actividad:

     @Override onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SecondClass.updateActivity(this); ... } 
  3. Utilice la instancia de actividad de esta manera:

     mActivityRef.get() 
 Activity a = (Activity) getContext(); 

Siempre que pase la actividad actual como contexto en el constructor, como ya lo está haciendo.

Acabo de establecer una variable en mi actividad principal como así … public static Activity activity = this; Entonces puedo referenciarlo desde cualquier lugar usando: MainActivity.activity .

También puede configurarlo en el método onCreate (), simplemente configure la variable en la parte superior de su clase de actividad principal como esta public static Activity activity; Entonces en el método onCreate () simplemente agregue activity = this; en cualquier sitio.

Esto funcionará para cualquier clase que extienda Actividad, por ejemplo, public class MainActivity extends Activity sin embargo, puede llamar a la variable de cualquier clase incluso si no se extiende Actividad.

Espero que esto ayude.

  • Guardar el estado de un WebView y volver a cargar la posición
  • Optimizaciones de Java: bytecode-only vs JIT
  • Android FFmpegMediaMetadataRetriever.getFrameAtTime () es lento
  • ¿Cómo garantizar que la imagen seleccionada por el usuario no cambia después de reiniciar Android?
  • Instalación de Android Studio, no apunta a un error de instalación de JVM válido
  • No se puede crear dispositivo virtual Android
  • ¿Funciona Android con JRE 7?
  • ListFragment Biblioteca de soporte GetSupportFragmentManager undefined
  • Cómo encontrar métodos overridable en eclipse
  • Android: el relleno dejó un mapa de bits con color blanco
  • ¿Cuál es la forma más adecuada de almacenar la configuración de usuario en la aplicación de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.