qqApk反编译:
  android,开一个QQ,后台显示运行3个QQ程序:QQ的运行组件;配置文件780行;12个service;15个receiver;309个activity;
 
   
   
   
   
     
   

   
   
    *****
   
   
   
   
   
   
   
   
   
 

 



  android开发小工具:
  HierarchyView,弄处正在现实view的结构;
  MemoryAnalyzer,内存分析;
  AllocationTracker,内存分配跟踪;
  Heap,堆内存信息;
  DdmsTrace:分析方法调用的次数,调用时间等;
  SystemInformation:(CpuLoad,MemoryUsage,FrameRenderTime);
  eclipse截屏:Ddms中ScreenCapture;   eclipse手机UI信息:Ddms中DumpViewHierarchyForUiAutomator;
  测试分析:monkey,monekyrunner,uiautomator,Robotium(同一签名权限),单元测试,启动性能;

  启动过程:Init进程->Zygote进程->SystemServer进程->SurfaceFlinger服务; Init是linux启动的第一个进程,Zygote就是由Init进程fork出来的;
  SurfaceFlinger直译就是surface的投递者;每个应用在它自己的surface完成各种图形操作后,请求SurfaceFlinger显示到屏幕,surfaceflinger就会将所有的surface叠加起来,并且反映到framebuffer;
  SurfaceFlinger服务运行在Android系统的System进程中,它负责管理Android系统的帧缓冲区(FrameBuffer);
  SurfaceFlinger.cpp继承了BinderService/BnSufaceComposer/IBinder::DeadthRecipient/Thread/HWComposer::EventHandler;
  ListView优化:convertView的重复利用(item量大),利用WeakRefference(item量小);   scrap,废料;
  convertView是在AbsListView类中的obtainView方法中取出来的,mRecycleBin.getScrapView(position);同一个View对象不能同时被展示多次;

  调试工具traceView的使用:
  内部通过android.os包下,public final class Debug{ *** }实现;//生成的文件存储在/sdcard/dmtrace.trace;
  可视图说明,每行下面粗的线段标注了ProfilePanel中被选中函数调用所消耗的时间段,每个线段对应一次函数的运行; Calls+RecurCalls/Total:非递归调用和递归调用的次数;    time/calls:表示平均的调用时间;

  tcpdump和wireshark使用:
  安装tcpdump,$adb root;  $adb push tcpdump /data/local/tcpdump;  $adb shell chmod 6755 /data/local/tcpdump;
  启动tcpdump,$adb shell /data/local/tcpdump -n -s 0;  $adb shell /data/local/tcpdump -i any -p -s 0 -w /sdcard/netCapture.pcap;  $adb pull /sdcard/netCapture.pcap
  wireshark,安装$sudo apt-get install wireshark;  $wireshark netCapture.pcap;

  DDMS截屏:
  DDMS通过adb调用设备端的adbd(ADB daemon)提供的framebuffer service进行截屏(源码在system/core/adb/framebuffer_service.c),在较早版本的Android中,framebuffer service通过直接读framebuffer设备(/dev/graphics/fb0)来截屏,在较新版本的Android中,framebuffer service则调用截屏工具screencap来截屏;
  screencap是Android原生自带的工具,是一个C写的可执行文件,在设备上的/system/bin/下面可以找到它,screencap截屏后可保存为PNG格式文件或RGB RAW文件.
  screencap的源码在frameworks/base/cmds/screencap/,它调用SurfaceFlinger提供的截屏接口ScreenshotClient,其源码在frameworks/native/include/gui/SurfaceComposerClient.h; ScreenshotClient通过进程间通信调用SurfaceFlinger service的截屏功能,源码在frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp中的函数SurfaceFlinger::captureScreen(*);
  在各种截屏方法中,读framebuffer设备(/dev/graphics/fb0)在某些使用硬件overlay显示时可能无法截取到某些画面(例如video playback和camera preview画面),但是SurfaceFlinger提供的上述截屏接口则可以完美截取任何屏幕画面;
  截屏操作方法:同时按下电源键和"音量-"键1秒,源码在frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java,调用hide类SurfaceControl的screenshot方法;
   SurfaceControl.screenshot(*);//android.view包下hide类;  内部调jni的nativeScreenshot(*);  内部调SurfaceComposerClient.h的,ScreenshotClient::capture(*);


更多相关文章

  1. ConfigurationTest以及横竖屏切换及2.3与4.0Configuration的区别
  2. Android系统的四大组件详解
  3. Android源码阅读方式——教你如何找到ActivityManagerService
  4. android拾遗——四大基本组件介绍与生命周期
  5. Ubuntu 18 android 5.1.0源码编译
  6. AIDL 消息通信
  7. Android(安卓)进程间通讯之通过Intent+bundle实现跨进程通讯
  8. Android(安卓)7.1 系统Setting界面增加返回机制
  9. Android快速开发框架ZBLibrary源码分享

随机推荐

  1. Mysql 增加外键,删除主外键关联表
  2. Python学习笔记之MySql数据库(一)
  3. mysql:mysql Access denied for user root
  4. Java和MySQL编写的简单手机销售管理系统
  5. 带有条件的MySQL中Row的值的总和
  6. mysql python pymysql模块 增删改查 查询
  7. Ruby on Rails SQL查询返回#<ActiveRecord
  8. Linux下修改MySQL初始密码、开启远程登录
  9. Ubuntu下安装MySQL并实现远程登录?
  10. mysql执行update语句时报错:Data truncati