Получить экземпляр активности

Извините меня за простой вопрос, я полностью начинаю java и разработчика Android. Как я могу получить экземпляр Activity в setCameraDisplayOrientation при вызове функции 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); .... } } } 

Solutions Collecting From Web of "Получить экземпляр активности"

Вот способ избежать утечек памяти, используя статическую переменную: сделайте статическую слабую ссылку на экземпляр Activity, который будет установлен в методе onCreate (Bundle).

  1. Напишите в своем вторичном классе что-то вроде ниже:

     public Class SecondClass { private static WeakReference<Activity> mActivityRef; public static void updateActivity(Activity activity) { mActivityRef = new WeakReference<Activity>(activity); } 
  2. Затем в методе onCreate (Bundle) вашего класса Activity:

     @Override onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SecondClass.updateActivity(this); ... } 
  3. Используйте экземпляр действия таким образом:

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

Пока вы передаете текущую деятельность как контекст в конструкторе, как вы уже делаете.

Я просто установил переменную в своей основной деятельности, например … public static Activity activity = this; То я могу ссылаться на него из любого места, используя: MainActivity.activity .

Вы также можете установить его в методе onCreate (), просто настройте переменную в верхней части вашего основного класса активности, как эта public static Activity activity; То в методе onCreate () просто добавьте activity = this; в любом месте.

Это будет работать для любого класса, который расширяет Activity, например public class MainActivity extends Activity но вы можете вызывать переменную из любого класса, даже если они не расширяют Activity.

Надеюсь это поможет.