Android面試題二

Android面試題二

自定義一個不帶系統邊框的Dialog

  1. 自定義style樣式,其中windowFrame設置爲@null

    <?xml version="1.0" encoding="utf-8"?>  
    <resources xmlns:android="http://schemas.android.com/apk/res/android">  
    <style name="add_dialog" parent="@android:style/Theme.Dialog">  
        <item name="android:windowFrame">@null</item><!-- 邊框 -->  
        <item name="android:windowIsFloating">true</item><!-- 是否浮現在activity之上 -->  
        <item name="android:windowIsTranslucent">false</item><!-- 半透明 -->  
        <item name="android:windowNoTitle">true</item><!-- 無標題 -->  
        <item name="android:windowBackground">@drawable/bg_search_end</item><!-- 自己想要的背景 -->  
        <item name="android:backgroundDimEnabled">false</item><!-- 模糊 -->  
    </style>  
    
  2. 自定義Dialog,繼承自Dialog,重寫構造方法。

    public class MyDialog extends Dialog{  
    public MyDialog(Context context, int theme) {  
    super(context, theme);  
    }  
    
    public SelectDialog(Context context) {  
    super(context);  
    }  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.slt_cnt_type);  
    }  
    }
    

    3.顯示Dialog 創建時不必採用建造者模式,直接new出對象,把style賦給dialog就可以。

    MyDialog selectDialog = new MyDialog(this,R.style.dialog);//創建Dialog並設置樣式主題  
    Window win = dialog.getWindow();  
    LayoutParams params = new LayoutParams();  
    params.x = -80;//設置x座標  
    params.y = -60;//設置y座標  
    win.setAttributes(params);  
    dialog.setCanceledOnTouchOutside(true);//設置點擊Dialog外部任意區域關閉Dialog  
    dialog.show();  
    

圖片的異步加載的方法

  1. 利用軟引用來緩存圖片,用圖片的URL經過MD5加密之後的數值作爲緩存查找的key。
  2. 設兩級緩存,一級是內存,二級是本地磁盤
  3. 如果兩級緩存都沒有取到圖片,則從服務器獲取,並加入緩存。
  4. 夾雜完成後通過接口回調的方式來通知UI更新。

瀑布流的實現方式

自定義ScrollView,動態代碼添加LinearLayout及ImageView。
1. 自定義ScrollView,並使用監聽器模式,對其滾動到最頂部,最底部進行監聽操作
2. 在Activity裏對ScrollView的橫向的LinearLayout動態添加列數,每一列是一個豎向的LinearLayout。
3. 根據列數及其List.size()對每一列的LinearLayout添加ImageView。
4. 根據監聽器對其滾動到頂部(不做操作),滾動到底部(加載更多數據)。正在滾動進行操作(滾動超過兩屏,回收兩屏之前的圖片)。

加載對話框動畫效果問題

在日常開發中我們可能會使用動畫效果的ProgressDialog。Dialog常用的方法有:show,hide,dismiss,cancel。
一般在網絡請求時候show,然後結束後dismiss,此刻如果再次請求的話,動畫效果就不動了。
可以將dismiss改爲hide。區別是前者是調用了對話框本身的onStop方法,並且從Activity上remove了,後者是仍然掛載在Activity上,只是隱藏了。動畫線程還在運行,個人感覺這麼寫都不好,會多佔用內存,而且還在在activity的退出的時候要記得dialog.cancel,否則機會內存泄漏,個人認爲可以採用imageView的方式來呈現動畫效果,而且更加方便可控制。

簡述一下你瞭解的設計模式

設計模式就是一套唄反覆使用的代碼設計經驗的總結,使用設計模式爲了可重用代碼,讓代碼更容易被他人理解,保證代碼可靠性,設計模式使人們可以更加簡單方便的複用的設計和體系結構。

主要分三類(創建型[對類的實例化過程的抽象化],結構型[描述如何將類或對象結合在一起形成更大的結構],行爲型[對不同的對象之間劃分責任和算法的抽象化]),一共有二十三種設計模式包括:Abstract Factory(抽象工廠模式),Builder(建造者模式),FactoryMethod(工廠模式),Singleton(單例模式), Decorator(裝飾模式),Adapter(適配器模式),Proxy(代理模式),Observer(觀察者模式),State(狀態模式),Strategy(策略模式)。。。。。未完待續。

簡述一下面向對象的六原則一法則

  • 單一責任原則:一個類自作它該做的事情。
  • 開閉原則 軟件實體當對擴展開放,對修改關閉。
  • 依賴倒轉原則面向接口編程。(說的直白些就是聲明方法的參數類型,方法的返回類型,變量的引用類型是,儘可能使用抽象類型而不用具體類型,因爲抽象類型可以被它的任何一個子類型所替代)。
  • 里氏替換原則:任何時候都可以用子類型替換掉父類型。
  • 接口隔離原則: 接口要小而專,不能大而全。
  • 合成聚合複用原則: 優先使用聚合或合成關係服用代碼。
  • 迪米特法則:又叫最少知識法則,一個對象應該對其他對象由儘可能少的瞭解。

Java中實現序列化,有什麼意義

序列化就是一種用來處理對象流的機制,所謂對象流就是將對象的內容進行流化,可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸與網路之間,序列化是爲了解決對象流讀寫操作時可能引發的問題。

XML和JSON的優缺點

一般而言,配置文件用XML,傳輸數據用JSON。逐步解析用XML,整體解析用JSON。大規模傳輸用XML,小數據用JSON。
XML:
- 優點:格式統一,符合標準。容易與其他系統進行遠程交互,數據供需昂比較方便。
- 缺點:XML文件龐大,文件格式複雜,傳輸佔帶寬。 服務器端和客戶端都需要大量代碼來解析XML,導致服務端和客戶端變得異常複雜和不易維護。客戶端不同瀏覽器之間解析XML的方式不一致,需要重複編寫很多代碼。服務端和客戶端解析XML話費較多的資源和時間。

JSON:
- 優點:數據格式比較簡單,易於讀寫,格式都是壓縮的,佔用帶寬小。易於解析。支持多種語言
,便於服務端解析。因爲JSON個數能直接爲服務端代碼使用,大大簡化了服務端和客戶端代碼量,且任務不變易於維護。
- 缺點:沒有XML深入人心和西永廣泛,沒有XML那麼通用性。JSON格式目前在WebSerview中推廣的還屬於初級階段。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章