Get activity instance

匿名 (未验证) 提交于 2019-12-03 02:14:01

问题:

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;      @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);         ....     }     } } 

回答1:

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:

    @Override onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     SecondClass.updateActivity(this);     ... } 
  3. Use activity instance this way:

    mActivityRef.get() 


回答2:

Activity a = (Activity) getContext(); 

As long as you pass the current activity as a context in the constructor, as you are already doing.



回答3:

I just set a variable in my main activity like so... public static Activity activity = this; then I can reference it from anywhere using: MainActivity.activity.

You can also set it in the onCreate() method, just set up the variable at the top of your main activity class like this public static Activity activity; then in the onCreate() method just add activity = this; anywhere.

This will work for any class that extends Activity, for example public class MainActivity extends Activity however you can call the variable from any class even if they don't extend Activity.

Hope this helps.



文章来源: Get activity instance
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!