我的应用程序在运行20分钟后冻结

时间:2018-03-09 10:42:55

标签: android android-fragments android-handler android-camera2 back-stack

我有一个运行一堆活动片段的应用程序; A> a1:片段> B> C,自动。 Activity A及其片段是android.hardware.camera2,我已将其作为库添加到我的应用程序中。为了自动运行堆栈活动,我在活动A中有一个处理程序用于照片捕获,而在活动C中有一个处理程序,用于启动活动A:

从活动A传递到片段a:

['9142','9142','9143'...]

用于照片捕获的处理程序并从片段a传递到活动B:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_A);
    if (null == savedInstanceState) {
        getSupportFragmentManager().beginTransaction().replace(R.id.container, a.newInstance()).commit();
    }
    final FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}

从活动B传递到活动C:

private final CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {   
@Override
    public void onOpened(@NonNull CameraDevice cameraDevice) {
        mCameraOpenCloseLock.release();
        mCameraDevice = cameraDevice;
        createCameraPreviewSession();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                btn.callOnClick();
            }
        }, 5000);
       }

@Override
    public void run() {
        ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
        byte[] bytes = new byte[buffer.remaining()];
        buffer.get(bytes);
        FileOutputStream output = null;
        try {
            output = new FileOutputStream(mFile);
            output.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            mImage.close();
            selectedPhotoPath2 = Uri.fromFile(mFile);
            Intent launchIntent = new Intent(getActivity().getBaseContext(), B.class);
            launchIntent.putExtra("uriFile2", selectedPhotoPath2);
            getActivity().startActivity(launchIntent);
            getActivity().finish();
                if (null != output) {
                try {
                    output.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
} 

从活动C传递回A:

String packageName = this.getPackageName();
Intent launchIntent2 = this.getPackageManager().getLaunchIntentForPackage(packageName);
    try {
        launchIntent2 = new Intent(this,Class.forName("com.example.ediamanti.imageprocessing.activities.C"));
    launchIntent2.putExtra("uriFile3", path);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    startActivity(launchIntent2);
    finish();

我的代码工作正常,但在运行20分钟后,它会在活动A上冻结。我想让应用运行一个多小时。当活动冻结时,Logcat中不会显示任何错误消息,而我可以返回应用程序的主菜单,因此活动冻结但应用程序没有崩溃。

我尝试了不同的方法来解决这个问题:

  • 在活动C(CLEAR_TOP,NEW_TASK等)中使用不同的FLAGS组合来清除后堆栈历史。
  • 传递意图时删除捆绑包以避免超出捆绑包事务限制。
  • 将移动设备的每个日志缓冲区的记录器大小从256KB更改为16MB。
  • 不同的处理程序'等待时间。

但它们似乎都没有解决我的问题。

有没有人知道如何解决这个问题或者有什么建议我可以按照哪些步骤来搜索错误?谢谢!

Android监视器主线程: enter image description here

0 个答案:

没有答案