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
可以對調試信息進行過濾,如標簽名,包名,日誌級別等