目录(?)[-]

  1. adb命令
  2. 模拟器Console
  3. StrictMode

adb命令

我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Content Provider(上) 。

abd –e shell

-e是表面连接模拟器emulator,-d则是连接设备。在模拟器中,我们有一个提升的Linux权限,而在真实设备是没有的,我们可以在模拟器中处理SQLite数据,但是不能在真实设备这样做,即便是我们自己部署的应用。

模拟器Console

我们可以通过telnet接入到模拟器,端口一般为5554,在模拟器的window title中显示。我们在当中模拟GPS事件,短信,电池状态和网络状态改变,具体可以参考:http://developer.android.com/guide/developing/devices/emulator.html#console

StrictMode

Android 2.3引入StrictMode(在android.os包中),用于检查线程和虚拟器的策略破坏,当检测到policy vialation,会生产一个含有stack trace的告警,据此可以强制程序崩溃或只是log记录继续执行。

Thread策略检查通常用于main thread,也成为UI线程。在主线程中一般不建议进行磁盘读写、网络访问,以及自定义的slow call(调用某代码慢)如果发现这类事件将进行告警,根据告警的内容,我们可以选择logcat记录、弹框显示、屏闪、写DropBox log file,或者直接crash程序。相关的代码例子如下:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
    .detectDiskReads() 
    .detectDiskWrites() 
    .detectNetwork()   //可以用detectAll(),表示全部监测。如果除了读disk外都检测,可以 .detectAll().permitDiskReads()  
    .penaltyLog()  //用LogCat来显示,可以在后面加上penaltyDeach()来crash应用 
    .build());

一旦打开strictmode,则适用于整个线程,可以在运行初期的onCreate()中设置,设置一次就足够。

VM策略检查用于检测内存泄漏,如SQLite对象,Activity对象,以及可以Closeable的对象,如调用close()进行关闭,使用例子如下。和线程策略检测很相似,不同之处在于虚拟机不能通过弹框来进行告警。

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() 
    .detectLeakedSqlLiteObjects() 
    .penaltyLog() 
    .penaltyDeath() 
    .build());

StrictMode应用于开发版本,而避免在生产版本中使用。简单地,我们可以直接删除相关的代码,但这不是好的处理方式。我们可以设置应用变量,例如static boolean PRODUCT_MODE = false; 先进行检测。推荐利用在AndroidManifest.xml中<application>中的android:debuggable参数,如果为true则开启strictmode,否则不开启。当eclipse在模拟器或设备中部署时,该值设置为true,而作为生产版本释放时,该值设置为false。代码例子如下:

ApplicationInfo appInfo = context.getApplicationInfo(); 
int appFlags = appInfo.flags;
 
if ((appFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { 
   // Do StrictMode setup here 
}

StrictMode只能在Android 2.3及之后版本使用,如果应用允许部署在2.3之前的版本。我们可以进行一些判断,但是2.2及之前的版本已经很少,可以不考虑它们。作为通用的版本API存在差别,可以使用下面的方法:

try { 
   Class sMode = Class.forName("android.os.StrictMode");  //1、检测该类是否存在,如不存在,将抛出ClassNotFoundException 
   Method enableDefaults = sMode.getMethod("enableDefaults"); //2、获取该类某个方法,例如strictMode.enableDefaults()  
   enableDefaults.invoke(null); //3、调用该方法。本例有静态方法 

catch(Exception e) { 
    // StrictMode not supported on this device, punt 
    Log.v("StrictMode", "... not supported. Skipping..."); 
}

但这种方式调用起来很满分,简单地我们可以将相关的代码用try{}catch(Throwable throwale){ …. }包括起来。如果没有StrictMode,则会抛出VerifyError出来,如下:

try {  
    …… //相关的处理 ……  

catch(Throwable throwable) { 
    Log.v("StrictMode", "... is not available. Punting..."); 
}

相关链接: 我的Android开发相关文章

【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode的更多相关文章

  1. 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

    目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...

  2. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

  3. 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...

  4. 【转】 Pro Android学习笔记(五六):配置变化

    目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...

  5. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

  6. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  7. 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

    目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...

  8. 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

    目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...

  9. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

随机推荐

  1. 我的Android进阶之旅------>Android中StateListDrawable支持的状态

    Android中StateListDrawable支持的状态 android:state_active 代表是否处于激活状态 android:state_checked  代表是否处于已勾选状态 an ...

  2. RZ11 系统配置参数

    SAP系统配置参数详解[转] SAP 系统参数设置 path: /usr/sap/PRD/SYS/profile profile: PRD_DVEBMGS00_sapapp 如果您想查看所有的参数及当 ...

  3. 查看当前.net版本 cmd

    reg query "HKLM\Software\Microsoft\NET Framework Setup\NDP" /s /v version | findstr /i ver ...

  4. SQL的优化1

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  5. 通过systemd配置Docker

    1. systemd Service相关目录 通常情况下,我们有3种方式可以配置etcd中的service.以docker为例,1)在目录/etc/systemd/system/docker.serv ...

  6. oss2模块和aliyun oss链接

    安装oss pip install oss2 首先已经理解OSS 基本概念,如Bucket.Object.Endpoint.AccessKeyId和AccessKeySecret等. 下面介绍如何使用 ...

  7. Python lambda 匿名函数

    lambda [arg1[, arg2, ... argN]]: expression Python使用lambda关键字创造匿名函数.所谓匿名,意即不再使用def语句这样标准的形式定义一个函数.这种 ...

  8. 算法(Algorithms)第4版 练习 2.2.5

    top-down: M E R G E S O R T E X A M P L E M E R G E S O R T E X A M P L E E X A M P L E merge(input, ...

  9. zookeeper 配置文件注释

    tickTime=2000 initLimit=5 syncLimit=2 dataDir=/opt/shencl/zookeeper/data/data0 dataLogDir=/opt/shenc ...

  10. Codeforces 402D Upgrading Array:贪心 + 数学

    题目链接:http://codeforces.com/problemset/problem/402/D 题意: 给你一个长度为n的数列a[i],又给出了m个“坏质数”b[i]. 定义函数f(s),其中 ...