请问一个简单的问题,我完全是初学者 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 实例进行静态弱引用。
在你的中学课上写下如下内容:
public Class SecondClass { private static WeakReference<Activity> mActivityRef; public static void updateActivity(Activity activity) { mActivityRef = new WeakReference<Activity>(activity); }
然后在 Activity 类的 onCreate(Bundle) 方法中:
@Override onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SecondClass.updateActivity(this); ... }
以这种方式使用 Activity 实例:
mActivityRef.get()
关于java - 获取 Activity 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9723106/