psct psct - 1 year ago 103
Android Question

Get activity instance

Excuse me for simple question,I'm completely beginner java and android developer. How I can get the instance of Activity in setCameraDisplayOrientation when surfaceChanged is called?

public class MyActivity extends Activity
private Camera mCamera;
private CameraPreview mPreview;
public final int cameraId = 0;
public Activity activity = null;

public void onCreate(Bundle savedInstanceState) {

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(;

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);

Answer Source

Here is a way to avoid memory leaks using static variable: make static weak reference to Activity instance that will be set in onCreate(Bundle) method.

  1. Write in your secondary class something like below:

    public Class SecondClass {
        private static WeakReference<Activity> mActivityRef;
        public static void updateActivity(Activity activity) {
            mActivityRef = new WeakReference<Activity>(activity);
  2. Then in onCreate(Bundle) method of your Activity class:

    onCreate(Bundle savedInstanceState) {
  3. Use activity instance this way:

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download