2013-05-02 98 views
2

在android中加載本地庫本文正在研究android源代碼,並且我發現在使用本地代碼時沒有使用靜態{System.loadLibrary()} 。如何使用靜態{System.loadLibrary()}

例如,在SystemServer.java中,本地方法「init1(args)」被調用,但文件中沒有靜態{System.loadLibrary()}。如何在沒有靜態{System.loadLibrary()}的情況下加載本機代碼?謝謝。

回答

2

本機庫只能爲整個應用程序加載一次,所以它可能已經被另一個已經實例化過的類加載了。請注意,這不是一個最佳實踐,因爲它會根據調用類的順序進行假設!

常用TECHNIC避免這種情況是創建一個Loader類是這樣的:

class Loader { 
    private static boolean done = false; 

    protected static synchronized void load() { 
     if (done) 
      return; 

     System.loadLibrary("library_name"); 

     done = true; 
    } 
} 

這樣一來,如果你在每一個需要使用的本地函數的類叫static{Loader.load();},可以確保庫已被加載(並且只有一次)。