java - 获取 Activity 实例

标签 java android android-activity

请问一个简单的问题,我完全是初学者 java 和 android 开发人员。调用surfaceChanged时如何在setCameraDisplayOrientation中获取Activity的实例?

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

最佳答案

这是一种使用静态变量避免内存泄漏的方法:对将在 onCreate(Bundle) 方法中设置的 Activity 实例进行静态弱引用。

  1. 在你的中学课上写下如下内容:

    public Class SecondClass {
        private static WeakReference<Activity> mActivityRef;
        public static void updateActivity(Activity activity) {
            mActivityRef = new WeakReference<Activity>(activity);
        }
    
  2. 然后在 Activity 类的 onCreate(Bundle) 方法中:

    @Override
    onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SecondClass.updateActivity(this);
        ...
    }
    
  3. 以这种方式使用 Activity 实例:

    mActivityRef.get()
    

关于java - 获取 Activity 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9723106/

相关文章:

java - 如何使用 byte-buddy 在运行时覆盖对象的值

java - Kotlin 如何在包含在 Lambda 中时指定返回标签

android - 如何在 camera2 api, android 中设置无限远焦点?

android - Twitter 登录重定向到错误的 Activity

android - WakeLock 在仍然举行的情况下完成

java - 按钮未启用?

java - 如何在 Lucene 文本字段上进行精确匹配和部分匹配?

android - 使用 View.GenerateViewId 创建 ID 时如何查找带 ID 的 TextView

不会在 Activity 之间重新加载的 Android 导航栏

javafx 2 媒体异常 : MEDIA_UNAVAILABLE won't load file