Android 错误 "The application may be doing too much work on its main thread"
Android error "The application may be doing too much work on its main thread"
我是 Android 的编程新手,我在使用 ADT 中的一个非常简单的示例时遇到了问题。我在一个 FrameLayout 中只有两个 ImageView,每个 ImageView,但是当我用我的 phone 测试它时,应用程序在没有任何逻辑的情况下变得非常慢,因为我没有触摸 java 文件夹。
这是我遇到的错误
12-16 16:17:43.261 18238-18238/com.example.brank.acocinapp I/Choreographer: Skipped 64 frames! The application may be doing too much work on its main thread.
12-16 16:17:44.781 18238-18248/com.example.brank.acocinapp W/art: Suspending all threads took: 26.044ms
12-16 16:17:44.831 18238-18238/com.example.brank.acocinapp W/PathParser: Points are too far apart 4.000000596046461
这是我的 content_main.xml
的 xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.brank.acocinapp.MainActivity">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/frameLayout2"
android:layout_alignParentBottom="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView3"
android:adjustViewBounds="true"
android:src="@drawable/home2" />
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/frameLayout"
android:layout_alignParentTop="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView2"
android:src="@drawable/home1"
android:adjustViewBounds="true"/>
</FrameLayout>
</RelativeLayout>
我必须指出,如果我评论两个 FrameLayout 之一,问题就不存在了。
编辑
我也把两张图片放在Drawable文件夹里(不知道有没有影响)但是我在教程里看到必须把图片放在Drawable文件夹里(mdpi, hdpi, xhdpi, xxhdpi) 问题是这个子文件夹不存在所以我将我的图像粘贴到 Drawable 中。
好的,可能发生的情况是 OS 正在尝试对您的图像进行大量处理,您可能选择了高分辨率。您可以做的是尝试创建图像的多种分辨率(mdpi、hdpi、xhdpi、xxhdpi)。您可以将图像的标准尺寸作为 mdpi,并分别为 hdpi、xhdpi、xxhdpi 按 1.5、2、3 的比例增加它们的尺寸。当你有这些图像时,将它们放在可绘制文件夹中,如果你没有它们,请自己创建它们。有时这甚至可能导致 android 中的 OOM。一篇文章explaining吧。
您应该查看 AsyncTask
和 Thread
的文档
Main Threads and Worker Threads
还有一个非常解释性的指南
发生的情况是您在主线程中执行了很多 cpu 消耗进程,这可能会导致您的主 UI 线程挂起。一个解决方案是在一个工作线程中进行整个图像处理,并让主线程只用于 UI 交互。
我是 Android 的编程新手,我在使用 ADT 中的一个非常简单的示例时遇到了问题。我在一个 FrameLayout 中只有两个 ImageView,每个 ImageView,但是当我用我的 phone 测试它时,应用程序在没有任何逻辑的情况下变得非常慢,因为我没有触摸 java 文件夹。
这是我遇到的错误
12-16 16:17:43.261 18238-18238/com.example.brank.acocinapp I/Choreographer: Skipped 64 frames! The application may be doing too much work on its main thread.
12-16 16:17:44.781 18238-18248/com.example.brank.acocinapp W/art: Suspending all threads took: 26.044ms
12-16 16:17:44.831 18238-18238/com.example.brank.acocinapp W/PathParser: Points are too far apart 4.000000596046461
这是我的 content_main.xml
的 xml <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.brank.acocinapp.MainActivity">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/frameLayout2"
android:layout_alignParentBottom="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView3"
android:adjustViewBounds="true"
android:src="@drawable/home2" />
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/frameLayout"
android:layout_alignParentTop="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView2"
android:src="@drawable/home1"
android:adjustViewBounds="true"/>
</FrameLayout>
</RelativeLayout>
我必须指出,如果我评论两个 FrameLayout 之一,问题就不存在了。
编辑
我也把两张图片放在Drawable文件夹里(不知道有没有影响)但是我在教程里看到必须把图片放在Drawable文件夹里(mdpi, hdpi, xhdpi, xxhdpi) 问题是这个子文件夹不存在所以我将我的图像粘贴到 Drawable 中。
好的,可能发生的情况是 OS 正在尝试对您的图像进行大量处理,您可能选择了高分辨率。您可以做的是尝试创建图像的多种分辨率(mdpi、hdpi、xhdpi、xxhdpi)。您可以将图像的标准尺寸作为 mdpi,并分别为 hdpi、xhdpi、xxhdpi 按 1.5、2、3 的比例增加它们的尺寸。当你有这些图像时,将它们放在可绘制文件夹中,如果你没有它们,请自己创建它们。有时这甚至可能导致 android 中的 OOM。一篇文章explaining吧。
您应该查看 AsyncTask
和 Thread
的文档
Main Threads and Worker Threads
发生的情况是您在主线程中执行了很多 cpu 消耗进程,这可能会导致您的主 UI 线程挂起。一个解决方案是在一个工作线程中进行整个图像处理,并让主线程只用于 UI 交互。