轉:SuppressLint解決辦法

轉:SuppressLint解決辦法  

  原文連接:http://ltj150539.blog.163.com/blog/static/19360535620154995740630/android

使用Eclipse編譯Android程序時常常會遇到@SuppressLint或者@SuppressWarnings黃色警告,雖然不去處理程序依然可以運行,可是強迫症表示看着實在不舒服。實際上,解決這些問題每每會提升程序的安全性、可用性、性能等。canvas

 

一、@SuppressLint("DrawAllocation")安全

緣由:View及其子類的onDraw(Canvas canvas)方法會實時調用以更新界面,因此在onDraw(Canvas canvas)方法中實例化對象(好比Paint paint = new Paint())會影響效率。異步

解決辦法:將這些對象改成類的成員變量。ide

二、@SuppressWarnings("rawtypes")@SuppressWarnings({ "unchecked", "rawtypes" })性能

1
2
3spa

 

Class clazz = Class.forName("android.view.Display");

Class<?> clazz = Class.forName("android.view.Display");orm

三、@SuppressLint("HandlerLeak")對象

緣由:Handler在Android中用於消息的發送與異步處理,經常在Activity中做爲一個匿名內部類來定義,此時Handler會隱式地持有一個外部類對象(一般是一個Activity)的引用。當Activity已經被用戶關閉時,因爲Handler持有Activity的引用形成Activity沒法被GC回收,這樣容易形成內存泄露。blog

正確的作法是將其定義成一個靜態內部類(此時不會持有外部類對象的引用),在構造方法中傳入Activity並對Activity對象增長一個弱引用,這樣Activity被用戶關閉以後,即使異步消息還未處理完畢,Activity也可以被GC回收,從而避免了內存泄露。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

 

    public static class MyHandler extends Handler {
        private WeakReference<Activity> reference;
        
        public MyHandler(Activity activity) {
            reference = new WeakReference<Activity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            if (reference.get() != null) {
                switch (msg.what) {
                case 0:
                    // do something...
                    break;
                default:
                    // do something...
                    break;
                }
            }
        }
    }

四、@SuppressLint("SimpleDateFormat")

1
2
3

 

    SimpleDateFormat format = new SimpleDateFormat(pattern);
    
    SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.getDefault());

五、@SuppressLint("DefaultLocale")

1
2

 

String lower = string.toLowerCase(); String lower = string.toLowerCase(Locale.getDefault());

相關文章
相關標籤/搜索