2017/7/31 andorid初級面試式題

1>由於android的機型大小不一,如何做到android屏幕適配?

a)“佈局”匹配

本質1:使得佈局元素自適應屏幕尺寸

做法:使用相對佈局(RelativeLayout),禁用絕對佈局(AbsoluteLayout)

b)屏幕方向

c)“圖片資源”匹配

本質:使得圖片資源在不同屏幕密度上顯示相同的像素效果

做法:使用自動拉伸位圖:Nine-Patch的圖片類型

假設需要匹配不同屏幕大小,你的圖片資源也必須自動適應各種屏幕尺寸

2>簡述一下android UI中的Layout

FrameLayout(幀佈局)。

LinearLayout(線性佈局)

RelativeLayout(相對佈局)。

TableLayout(表格佈局)。

AbsoluteLayout(絕對佈局)。

參考文獻https://www.cnblogs.com/chiao/archive/2011/08/24/2152435.html

3>andorid可以在子線程中更新UI,為什麼?

不能。

在子線程中刷新UI有三種方法:
方法一:用Handler 
    1、主線程中定義Handler:
    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 0:
                //完成主界面更新,拿到數據
                String data = (String)msg.obj;
                updateWeather();
                textView.setText(data);
                break;
            default:
                break;
            }
        }
    };
    2、子線程發消息,通知Handler完成UI更新: 
    private void updateWeather() {
    new Thread(new Runnable(){
        @Override
        public void run() {
            //耗時操作,完成之後發送消息給Handler,完成UI更新;
            mHandler.sendEmptyMessage(0);      
            //需要數據傳遞,用下面方法;
            Message msg =new Message();
            msg.obj = "數據";//可以是基本類型,可以是對象,可以是List、map等
            mHandler.sendMessage(msg);
        }  
        }).start();
    }
    方法一的Handler對象必須定義在主線程中,如果是多個類直接互相調用,就不是很方便,需要傳遞content對象或通過接口調用;

方法二:用Activity對象的runOnUiThread方法更新UI
    在子線程中通過runOnUiThread()方法更新UI: 
    new Thread() {  
        public void run() {  
            //這兒是耗時操作,完成之後更新UI;  
            runOnUiThread(new Runnable(){  
               @Override  
               public void run() {  
                  //更新UI  
                  imageView.setImageBitmap(bitmap);  
               }       
           });  
        }
   }.start();
    如果在非上下文類中(Activity),可以通過傳遞上下文實現調用; 

    Activity activity = (Activity) imageView.getContext();  
        activity.runOnUiThread(new Runnable() {  
            @Override  
            public void run() {  
            imageView.setImageBitmap(bitmap);  
        }  
    });
    這種方法使用比較靈活,但如果Thread定義在其他地方,需要傳遞Activity對象; 

方法三:View.post(Runnable r) 
    imageView.post(new Runnable(){  
        @Override  
        public void run() {  
            imageView.setImageBitmap(bitmap);  
        }
    });
這種方法更簡單,但需要傳遞要更新的View過去; 

總結:UI的更新必須在主線程中完成,所以不管上述那種方法,都是將更新UI的消息發送到瞭主線程的消息對象,讓主線程做處理.

 

4>防止java內存泄露的幾種措施?

5>andorid中java跟linux c/c++ 是如何調用的?

6>android中的handler主要目的是用作什麼的?

在Android中,Handler機制主要用作異步消息處理,主要接受子線程發送的數據, 並用此數據配合主線程更新UI。

它有兩個作用: (1): 安排消息或Runnable 在某個主線程中某個地方執行

(2)安排一個動作在不同的線程中執行

 

7>簡述andorid中的task與thread適用的場景
a)task是異步類
b)thread是線程類

8>從網絡上下載一個png圖片,並將其顯示出來,最後需要釋放圖片內存,
是直接將bitmap置空還是得調用特定的釋放方法再置空。為什麼?

9>andorid的一個圖片在手機中占用的內存是如何計算的?如何監控andoird總共占用的內存量?

10>設計一個學生信息管理系統,並畫出結構圖和流程圖

You May Also Like