psc*_*sct 22 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);
....
}
}
}
Run Code Online (Sandbox Code Playgroud)
Евг*_*нко 27
这是一种使用静态变量来避免内存泄漏的方法:对将在onCreate(Bundle)方法中设置的Activity实例进行静态弱引用.
在您的二级课程中写下如下内容:
public Class SecondClass {
private static WeakReference<Activity> mActivityRef;
public static void updateActivity(Activity activity) {
mActivityRef = new WeakReference<Activity>(activity);
}
Run Code Online (Sandbox Code Playgroud)然后在Activity类的onCreate(Bundle)方法中:
@Override
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SecondClass.updateActivity(this);
...
}
Run Code Online (Sandbox Code Playgroud)以这种方式使用活动实例:
mActivityRef.get()
Run Code Online (Sandbox Code Playgroud)Activity a = (Activity) getContext();
Run Code Online (Sandbox Code Playgroud)
只要您将当前活动作为构造函数中的上下文传递,就像您已经在做的那样.
我只是在我的主要活动中设置一个变量,就像这样......public static Activity activity = this;然后我可以从任何地方使用:MainActivity.activity。
您也可以在 onCreate() 方法中设置它,只需像这样public static Activity activity;在主活动类的顶部设置变量,然后在 onCreate() 方法中添加activity = this;任何地方即可。
例如,这适用于扩展 Activity 的任何类,public class MainActivity extends Activity但是您可以从任何类调用变量,即使它们不扩展 Activity。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
72947 次 |
| 最近记录: |