Получить экземпляр активности
13 psct [2012-03-15 18:39:00]
Извините меня за простой вопрос, я полностью начинаю разработку java и android. Как я могу получить экземпляр Activity в setCameraDisplayOrientation при вызове функции surfaceChanged?
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);
....
}
}
}
java android android-activity
3 ответа
15 Решение Евгений Шевченко [2015-03-19 16:26:00]
Вот способ избежать утечек памяти с помощью статической переменной: сделать статическую слабую ссылку на экземпляр Activity, который будет установлен в методе onCreate (Bundle).
-
Напишите в своем вторичном классе что-то вроде ниже:
public Class SecondClass { private static WeakReference<Activity> mActivityRef; public static void updateActivity(Activity activity) { mActivityRef = new WeakReference<Activity>(activity); }
-
Затем в методе onCreate (Bundle) вашего класса Activity:
@Override onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SecondClass.updateActivity(this); ... }
-
Используйте экземпляр действия следующим образом:
mActivityRef.get()
7 ivagarz [2013-10-03 07:39:00]
Activity a = (Activity) getContext();
Пока вы передаете текущую активность как контекст в конструкторе, как вы уже делаете.
4 Luke Alderton [2012-11-11 00:50:00]
Я просто устанавливаю переменную в своей основной деятельности, например... public static Activity activity = this;
, тогда я могу ссылаться на нее из любого места, используя: MainActivity.activity
.
Вы также можете установить его в методе onCreate(), просто настройте переменную в верхней части основного класса активности, как этот public static Activity activity;
, а затем в методе onCreate() просто добавьте activity = this;
в любом месте.
Это будет работать для любого класса, который расширяет Activity, например public class MainActivity extends Activity
, однако вы можете вызывать переменную из любого класса, даже если они не расширяют Activity.
Надеюсь, что это поможет.