Google严苛模式【调试、优化、检查】让你的APP更优,突破优化瓶颈

1.什么是严苛模式(StrictMode)

技术分享

StrictMode是一个开发工具,检测到你可能的事情 偶然做的就让你的注意力,这样你就可以修复 他们。

StrictMode是最常用的磁盘或意外 网络访问应用程序的主线程,UI 操作和动画进行接收。 保持磁盘 和网络业务主线程会更为顺畅, 应用程序更加敏感。 通过保持应用程序的主线程 响应,你也阻止 ANR对话框 显示给用户。

注意,即使Android设备的磁盘 通常在闪存,很多设备文件系统上运行 记忆有非常有限的并发。 这是常有的事 几乎所有的磁盘访问都是快,但在个别情况下可能 大幅放缓时,在后台发生的某些I / O 从其他进程。 如果可能的话,最好是假设等 事情并不快。

2.严苛模式的用法

google的示例如下:

public void onCreate() {
     if (DEVELOPER_MODE) {
         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                 .detectDiskReads()
                 .detectDiskWrites()
                 .detectNetwork()   // or .detectAll() for all detectable problems
                 .penaltyLog()
                 .build());
         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                 .detectLeakedSqlLiteObjects()
                 .detectLeakedClosableObjects()
                 .penaltyLog()
                 .penaltyDeath()
                 .build());
     }
     super.onCreate();
 }

只需要在super.onCreate()方法加上这句就OK了

3.优化严苛模式,让它成为真正的工具

我们可以写到BaseActivity中,让其他Activity继承自这个BaseActivity,并且设置一个开关来控制它DEVELOPER_MODE

4.查看log日子信息

先看下边一段代码

/**
 * Created by zsl on 2014/12/31.
 */
public class StrictModeActivity extends BaseActivity implements BaseActivityInterface,View.OnClickListener {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        AppConfig.setDeveloperMode();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initEvent();
        initData();
    }

    @Override
    public void initView() {

    }

    @Override
    public void initEvent() {

    }

    @Override
    public void initData() {
        String url="http://g.hiphotos.baidu.com/image/w%3D310/sign=7725d8ccd3a20cf44690f8de46084b0c/e1fe9925bc315c601a0f34a48eb1cb13485477e6.jpg";
        try {
            URL url1 = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
            connection.setConnectTimeout(15000);
            connection.setReadTimeout(10000);
            connection.setRequestMethod("GET");
            connection.setDoInput(true);
            connection.connect();
            connection.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case 1:{
                break;
            }
            default:{
                break;
            }
        }
    }
}

我是在主线程去直接访问了网络,一般情况下我们如果这样做了,网络状况好的情况下,不会有任何的影响。
但是我们加上严苛模式以后的查看一下会有什么效果呢?

技术分享

log日子中会报错,并且出现StrictMode的关键字,并且会爆出错误的原因和需要改进的地方
最后在模拟器上会重新弹出一个不可点击的界面,这就说明你需要做一些优化了

5.总结

严苛模式检查什么?
检查在主线程的耗时操作:网络访问、复杂动画、磁盘读写,等

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。