我有一个运行一堆活动片段的应用程序; 自动> A1:片段> B>C。 活动A及其片段是android.hardware.camera2,我已将其作为库添加到我的应用中。 为了自动运行活动堆栈,我在活动A中有一个用于拍照的处理程序,在活动C中有一个启动活动A的处理程序:
从活动A传递到片段a:
@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);
}
}
用于照片捕获并从片段a传递到活动B的处理程序:
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();
}
}
}
}
}
从活动B传递到活动C:
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();
从活动C传回A:
final Handler handler2 = new Handler(Looper.getMainLooper());
runnable = new Runnable() {
@Override
public void run() {
Intent intent = new Intent(C.this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
};
handler2.postDelayed(runnable, 1000);
我的代码运行正常,但运行20分钟后冻结在活动A上。 我希望该应用程序运行一个多小时。 活动冻结时,Logcat中没有错误消息,而我可以返回到应用程序的主菜单,因此活动冻结,但应用程序不会崩溃。
我尝试了不同的方法来解决此问题:
但它们似乎都不是解决我问题的方法。
是否有人对如何解决此问题有任何想法,或者对我可以按照哪些步骤搜索错误的建议?
Android监视器主线程: 在此处输入图片描述