1. 程式人生 > >Android嚴苛模式【除錯、優化、檢查】優化APP

Android嚴苛模式【除錯、優化、檢查】優化APP

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.總結

嚴苛模式檢查什麼? 
檢查在主執行緒的耗時操作:網路訪問、複雜動畫、磁碟讀寫,等