Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取活动实例_Java_Android_Android Activity - Fatal编程技术网

Java 获取活动实例

Java 获取活动实例,java,android,android-activity,Java,Android,Android Activity,请原谅我提出一个简单的问题,我完全是java和android开发的初学者。调用surfaceChanged时,如何获取SetCameraRadisPlayOrientation中的活动实例 public class MyActivity extends Activity { private Camera mCamera; private CameraPreview mPreview; public final int cameraId = 0; public Ac

请原谅我提出一个简单的问题,我完全是java和android开发的初学者。调用surfaceChanged时,如何获取SetCameraRadisPlayOrientation中的活动实例

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

我只是在我的主要活动中设置了一个变量,就像这样<代码>公共静态活动活动=此然后我可以使用:
MainActivity.activity
从任何地方引用它

您也可以在onCreate()方法中进行设置,只需在主activity类的顶部设置变量,如下所示
publicstaticactivity
然后在onCreate()方法中添加
activity=this任何地方

这将适用于扩展活动的任何类,例如
public class MainActivity extends Activity
,但是您可以从任何类调用变量,即使它们不扩展活动

希望这有帮助

Activity a = (Activity) getContext();

只要您将当前活动作为上下文在构造函数中传递,就像您已经在做的那样。

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

  • 在第二节课上写下如下内容:

    public Class SecondClass {
        private static WeakReference<Activity> mActivityRef;
        public static void updateActivity(Activity activity) {
            mActivityRef = new WeakReference<Activity>(activity);
        }
    
  • 以这种方式使用活动实例:

    mActivityRef.get()
    

  • 方法
    this.getParent()
    有效。

    为什么需要它的实例。它的重写方法将具有某些活动上下文。但如果您愿意,仍然可以尝试使用
    MyActivity。此
    我使用
    但调用surfaceChanged时程序会崩溃。好啊我将再次检查程序崩溃的原因。我需要这个实例在上下文中调用它的方法:
    activity.getWindowManager().getDefaultDisplay().getRotation()
    Memory leak,如下所述。通过保持对静态上下文(活动)的引用,这肯定会导致内存泄漏.您难道不知道编译错误吗
    无法在静态上下文中使用它
    ?请不要传播这种技术,因为它会产生糟糕的编码风格、难以维护代码库以及各种问题,例如内存泄漏。希望人们能抽出时间来阅读Android的最佳实践和设计模式。如果你想将活动实例存储在静态变量上并避免内存泄漏,这是一个好办法。这是完全错误的,Android活动是在内存压力下重新创建的,在这种情况下,你持有的已销毁活动的错误引用!!我的意思是,它可以一直使用到内存被压缩,并且可以在每次应用程序返回前台时更新。Miha_x64,singleton只是一个应用程序结构模型,可以作为应用程序结构的一部分应用于任何对象。所以1-这段代码运行良好,可以测试。2-不要说你不明白的事情。我可以确认这解决了内存泄漏问题,因为LeakCanary在实现之前报告了内存泄漏,之后就消失了。
    
    mActivityRef.get()