java - 当应用程序进入后台时,Android 绑定(bind)程序事务失败

标签 java android

我有一个 fragment ,我在新实例中获取 1 个字符串,该字符串是 pdf 文件的 base64,然后将其转换为字节数组。我可以打开大尺寸的 pdf,超过 30mb,但是当应用程序进入后台时,它崩溃并显示“TransactionTooLargeException”。我尝试设置 2 个变量,base64 字符串和字节 null onPause 数组,或者使用saveInstanceState.clear(),但是当我使用手机主页按钮关闭应用程序时,应用程序继续崩溃。 我不明白为什么如果变量为空,它无论如何都会崩溃。我可以避免 saveInstanceState 吗?

private const val BASE64_PDF = "base64_pdf"


class PdfViewerFragment : Fragment() {

private var basePdf: String? = null
private var pdfAsBytes: ByteArray? = null


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    arguments?.let {
        basePdf = it.getString(BASE64_PDF)
    }
}

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_pdf_viewer, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    pdfAsBytes = basePdf.let { PdfUtils.convertBaseToByte(it) }
    if (pdfAsBytes != null) showPdf()

}


override fun onAttach(context: Context) {
    super.onAttach(context)

}

override fun onPause() {
super.onPause()
basePdf = null
pdfAsBytes = null
}

private fun showPdf() {
    pdf_view.fromBytes(pdfAsBytes)
        .enableSwipe(true)
        .swipeHorizontal(false)
        .enableDoubletap(true)
        .defaultPage(0)
        .enableAntialiasing(true)
        .onError { t ->
            showError()
            Log.d(TAG, t.message)
        }
        .load()
}

private fun showError() {
    Toast.makeText(context, "Errore durante il caricamento del PDF", Toast.LENGTH_LONG).show()
}

companion object {

    const val TAG = "PdfViewerFragmentTag"
    @JvmStatic
    fun newInstance(basePdf: String) =
        PdfViewerFragment().apply {
            arguments = Bundle().apply {
                putString(BASE64_PDF, basePdf)
            }
        }
}
}

这是错误:

2019-05-03 12:59:18.986 24071-24071/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.energym.app.energympalestre, PID: 24071
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 93574832 bytes
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:160)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6810)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
 Caused by: android.os.TransactionTooLargeException: data parcel size 93574832 bytes
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(BinderProxy.java:473)
    at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:3973)
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144)
    at android.os.Handler.handleCallback(Handler.java:873) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:201) 
    at android.app.ActivityThread.main(ActivityThread.java:6810) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

然后,当我使用任务管理器返回应用程序时,它会返回到开始 Activity ...只有巨大的 pdf 文件才会出现这种情况。

最佳答案

在onPause pdf_view.close();

在onStart pdf_view.load();

关于java - 当应用程序进入后台时,Android 绑定(bind)程序事务失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55968476/

相关文章:

android - 在覆盖DefaultUncaughtExceptionHandler的同时,我还能在市场上获得错误报告吗?

java - Spring - 为请求 header 名称注入(inject)值

java - Hibernate:外键的列数错误。应该是 1

java - 我们可以制作矩形戒指吗?

javascript - 使用 jquery 用户代理检测隐藏页面元素在 Android 中速度较慢但在 iOS 中不慢 - 如何修复?

java - 枚举字段上的 ActiveAndroid NoClassDefFoundError 异常

java - JPA:外部容器事务未提交

java - 在保留 xsi :type 的同时合并文档

java - Eclipse:JVM 终止。退出代码=2

android - 如何在android中找到哪个应用程序在服务器上发送哪个文件