如何解决Android Studio-应用程序无法在Android 10.0中运行-在runtime_flags中设置的未知位:0x8000
我已经在Android Studio中制作了一个Java应用程序,并在Android 6、7和10上对其进行了测试。
但是它似乎在Android 10上不起作用。
我的Logcat错误:
2020-11-08 22:47:43.022 26407-26407/? E/cd.mydataappon: UnkNown bits set in runtime_flags: 0x8000
2020-11-08 22:49:03.515 26407-29671/com.abcd.mydataappone E/Openglrenderer: ReliableSurface: perform returned an error
我的AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.abcd.mydataappone">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<application
android:allowBackup="true"
android:fullBackupContent="@xml/backup_descriptor"
android:icon="@mipmap/ic_launcher"
android:label="Data App"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="AllowBackup,RtlEnabled">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我在其他任何地方都找不到答案。
预先感谢。
解决方法
由于我不知道您对 Java 了解多少、java 的确切工作原理以及 concurrency 是什么,因此我将尝试在几乎不需要背景信息的情况下尽可能多地进行解释。
首先,我们将查看 Oracle 的 InterruptedException
文档。
当线程正在等待、睡眠或以其他方式被占用,并且线程在活动之前或期间被中断时抛出。 [...]
这是什么意思?
在回答这个问题之前,您必须初步了解 Thread
的工作原理。
A thread 最初只是一段代码,可以与其他线程分开管理。它可以同时运行(参见concurrency)、计划运行等。
示例
如果你启动一个普通的java程序,main()
方法是在自己的线程1中创建的。你所做的一切都将在这个线程中执行。您创建的每个类、您调用的每个方法以及基本上源自 main()
的所有内容。
但是如果您创建一个 Thread
,它会在自己的线程 2 中运行。您在 run()
方法中所做的一切都将在线程 2 中执行。
如果您创建新的 Thread
会怎样?
调用 join()
方法。
join()
方法启动线程并正在执行 run()
。
不仅有不带参数的 join()
方法,还有带参数的 join(long millis)
。
何时以及为何抛出?
正如 Rahul Iyer 所说,有多种原因。我挑选了其中一些,让你在被叫到时感受一下。
- 超时
当超过超时时,确实可以抛出 InterruptedException
。当调用 join(long millis)
时会发生这种情况。该参数指定线程可以运行给定的毫秒数。当线程超过此超时时间时,它会被中断。 source(从第 769 行到第 822 行)。
- 操作系统正在停止线程
也许 O 运行的 S 系统(Windows、Linux、Android 等)决定停止该程序。为什么?为了释放资源,您的程序被误认为是病毒,硬件正在关闭,用户手动关闭它等。
-
在
中抛出 InterruptedExceptionThread
例如,您已连接到互联网并且正在阅读某些内容,但互联网突然断开连接。
-
interrupt()
被称为如前所述,当您在任何
InterruptedException
上调用interrupt()
时,也会抛出Thread
(非常合乎逻辑)。
如何处理?
您可以/应该像处理其他所有异常一样处理它。将其包裹在 try
和 catch
中,声明方法 throws
it,记录它等
这可能是最适合您的资源:Handling InterruptedException in Java。
,来自文档:https://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html
公共类 InterruptedException 扩展异常
当线程正在等待、睡眠或其他被占用时抛出,并且线程处于 在活动之前或期间被打断。偶尔一个 方法可能希望测试当前线程是否已被 中断,如果是,立即抛出这个异常。这 可以使用下面的代码来实现这个效果:
if (Thread.interrupted()) // Clears interrupted status!
throw new InterruptedException();
你可以在这里学习 oracles 教程:
https://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html
修复它的方法可能是用 Try-Catch 块包围导致它的代码并处理异常。例如(来自 Oracles 教程):
for (int i = 0; i < importantInfo.length; i++) {
// Pause for 4 seconds
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// We've been interrupted: no more messages.
return;
}
// Print a message
System.out.println(importantInfo[i]);
}
以上链接中有更多关于如何处理不同场景的示例。
,很快,当线程或其他一些操作被中断时,通常会抛出 InterruptedException。线程是在做某事还是在睡觉都没有关系,您可以通过调用interrupt() 或其他方法来以编程方式执行此操作,并在“被占用”的线程上执行此操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。