我有一个运行一堆活动片段的应用程序; 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中不会显示任何错误消息,而我可以返回应用程序的主菜单,因此活动冻结但应用程序没有崩溃。
我尝试了不同的方法来解决这个问题:
但它们似乎都没有解决我的问题。
有没有人知道如何解决这个问题或者有什么建议我可以按照哪些步骤来搜索错误?谢谢!
Android监视器主线程: enter image description here