androidgraphic
1. 怎么序列化android.graphics.Path
继承 android.graphics.Path 类,重写 moveTo, lineTo 等方法,记录下 path 绘制的每一点的左边数据;反序列化的时候调用 “drawThisPath” 重绘 path。
相关代码:
public class CustomPath extends Path implements Serializable {
private static final long serialVersionUID = -5974912367682897467L;
private ArrayList<PathAction> actions = new ArrayList<CustomPath.PathAction>();
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
in.defaultReadObject();
drawThisPath();
}
@Override
public void moveTo(float x, float y) {
actions.add(new ActionMove(x, y));
super.moveTo(x, y);
}
2. android的如何使用异或方式绘图
1)使用canvas/paint方式的绘图为软件渲染,通过cpu实现;使用opengles/shader方式的绘图为硬件加速渲染,通过gpu实现。
2)surfaceview和glsurfaceview的显示一般结合opengles,使用纹理(texture),为硬件渲染,通过gpu实现
3)glsurfaceview是surfaceview的子类,在后者基础上封装了egl环境管理,以及render线程
4)opengles绘制函数及shader是平台无关的,需要egl环境对接android/ios等平台
5)android graphic 底层都与BufferQueue、Surfaceflinger等相关,具体可参考android开发者文档
个人经验,如有不对之处请帮忙指出
作者:阿占
链接:https://www.hu.com/question/36030004/answer/65581599
来源:知乎
着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3. android中显示图片,怎么显示“android.graphics.drawable.BitmapDrawable@426ed550”这种路径的图片
首先你要把hashmap改成HashMap(String, Drawable)
然后put进去
ImageView有个方法
setImageDrawable(Drawable d)
直接把drawable对象传如即可
如果只能得到资源,可以调用setImageResource(int resourceId)
4. Android android.graphics.Color颜色对应的RGB值
参考: https://blog.csdn.net/qq_43882867/article/details/124148320
5. java.io.NotSerializableException: android.graphics.Paint
应该是没有序列化。序列化可以将内存中的类写入文件或数据库中。比如user类。序列化代码:public class UserInfo implements Serializable { }
tomcat停止时,session要将对象信息序列化到硬盘,tomcat重启时,再反序列化到session中。这个异常还是我说的那个你没有把你的类序列化。只要在你的类名后加上implements Serializable就行了。
6. Android.Graphics在哪
首先你要把hashmap改成HashMap(String, Drawable)然后put进去ImageView有个方法setImageDrawable(Drawable d)直接把drawable对象传如即可
7. 有办法降低 Android 的 graphics 层的内存吗
(1) 操作Bitmap对象,一定要注意,在不使用的时候 recycle
(2) 访问数据库,一定要记得关闭游标
(3) 涉及JNI层的代码,由于JNI层是采用C/C++编写,需要自己管理内存的分配/回收,所以要慎重小心。
那么,Android开发中,有什么有效的方法可以检测内存使用情况以及内存泄漏呢看
这里主要介绍三种方法:
1. 程序的Log信息
程序在进行垃圾回收的时候,会打印一条Log信息(logcat窗口),例如:
D/dalvikvm( 9050): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/K, paused 2ms+2ms
注意这条信息中的 逗 3571K/9991K地 值,这代表着程序使用的heap大小,如果这个值一直在增加,而从来不减小,那么就代表着你的程序存在着内存泄漏。
2. DDMS的Heap信息
Eclipse开发环境还提供了一种更加直观的方法来查看App的Heap信息,操作方式如下:
(1) 连接手机,运行程序,假设是 com.ticktick.test 程序
(2) 点击DDMS按钮,在左侧的Device窗口选中你要检测的程序(com.ticktick.test )
(3) 点击Device窗口工具栏的第二个图标(Update Heap),
(4) 点击右边的窗口的Cause GC按钮,即可得到当前程序的Heap信息
同样,随着程序的运行,多次点击得到的Heap大小,如果只增不减的话,也昭示着你的程序有内存泄漏。
3. adb命令查看内存信息
其实,最全面最简单的方式还是用adb命令来查看程序的内存占用和内存泄漏情况,打开命令行窗口,adb命令的格式如下:
adb shell mpsys meminfo <package_name>
其中,package_name 也可以换成程序的pid,pid可以通过 adb shell top | grep app_name 来查找,在命令行窗口运行上述命令,得到的我的 com.ticktick.test 程序的内存情况如下所示:
这里得到的信息非常多,重点关注如下几个字段:
(1) Native/Dalvik 的 Heap 信息
具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。
(2) Total 的 PSS 信息
这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。
4. 总结
关于Android开发中内存的使用情况和内存泄漏的检测就简单介绍到这里,基本上用以上三种方式都能够定位内存泄漏问题,平时在使用Bitmap,数据库和JNI层C/C++编程的时候,注意一点就行。另外,如果想深入了解文中的一些详细内容,可以参考Google官方提供的两篇文章,它们有着更详细的论述《Investigating Your RAM Usage》,《Managing Your App Memory》,有任何疑问或者不清楚的地方,欢迎留言或者来信[email protected]交流。
8. Android studio模拟器的Graphics影响日志的打印
手机重新插一下,如果不行,就重启as,如果还不行那就重启一下电脑。
启动Android Studio,选中android工程并打开
工具栏选择【Tools】-》【Android】
点击【Android】选项,子选项选中【Android Device Monitor】,弹出窗口,该窗口类似eclipse
Android Device Monitor窗口,如图
Android Device Monitor窗口上方有设备管理,可以选中已连接的模拟器或实际设备(android手机、平板),在右侧的窗口可以查看当前设备的实时数据及状态,如:数据连接,线程,文件管理等等
Android Device Monitor窗口下方为Logcat和Console 控制台
选择需要追踪的工程,查看详细调试信息
7
可以对调试信息进行过滤,如标签名,包名,日志级别等