頻道欄目
首頁 > 資訊 > Android > 正文

Android基礎知識總結

14-03-23        來源:[db:作者]  
收藏   我要投稿

一、基礎知識:
1.Android SDK:Android SDK包含了一個調試器、庫、一個模擬器、文檔、實例代碼和教程。
2.ADT: 用于Eclipse的Android開發工具(Android Development Tools,ADT)插件是對Eclipse IDE的擴展,用以支持android應用程序的創建和調試。
3.AVD(Android Virtual Device): AVD是一個模擬器實例,可以用來模擬一個真實的設備。
4.Activity: Activity(活動)是一個包含應用程序的用戶界面窗口。一個應用程序可以有零個或多個活動。Activity 是所有程序的根本,所有程序都運行在Activity之中,Activity具有自己的生命周期,由系統控制生命周期,程序無法改變。
5.Intent:Intent是android中的一種消息通信機制(媒介),專門提供組件互相調用的相關信息,實現調用者和被調用的解耦。
5.1.顯示Intent:指定了component屬性的intent(調用 setComponent)或者setClass(context,class)來指定)。通過指定具體的組件類,調用應用啟動對應的組件。
5.2.隱式Intent:沒有指定component屬性的Intent。這些Intent需要包含足夠的信息,這些系統才能根據這些信息,在所有的可用組件中,確定滿足此Intent的組件。
6.Toast: Toast是android中用來顯示信息的一種機制和Dialog不一樣的是,Toast是沒有焦點的,而且Toast顯示的時間有限,過一定時間就會自動消失。
7.Android 操作系統: Android是一種基于Linux的開源的收集操作系統。
8.APK是Android Package的縮寫,即Android安裝包(anapk)。ps:APK文件其實是zip格式,但后綴名修改為APK,通過UnZip解壓后,可以看到Dex文件,Dex是Dalvik VM executes的全稱,即Android Dalvik執行程序,并非Java ME的字節碼而是Dalvik的字節碼。

9.Android 四大組件(Activity,Service,Broadcast Receiver,Content Provider)

9.1.Activity:應用程序中,一個Activity通常是一個單獨的屏幕,它上面可以顯示一些控件也可以監聽并處理用戶的事件做出響應。Activity之間通過Intent進行通信。在Intent的描述結構中,有兩個重要的部分:動作和動作對應的數據。

9.2.Broadcast Receiver:廣播接收者(BroadcastReceiver)用于接收廣播Intent,廣播Intent的發送是通過調用Context.sendBroadCast()、Context.sendOrderedBroadcast()、Context.sendStickyBroadcast()來實現的。通常一個廣播Intent可以被訂閱了此Intent的多個廣播接收者所接收(就像真的收音機一樣)。廣播(Broadcas)是一種廣泛運用的應用程序之間的傳輸消息的機制。而廣播接收者(BroadcastReceiver)是對發送出來的廣播進行過濾并接收響應的一類組件。ps:BroadcastReceiver 廣泛應用與應用間的交流。

9.2.1 BroadcastReceiver生命周期:每次廣播到來時,會重新創建BroadcastReceiver對象,并調用onReceive()方法,執行完以后,該對象即被銷毀。當onReceive()方法在10s內沒有執行完畢,就會導致ANR。如果需要執行長任務,那么就必須要使用Service。另外在onReceive中使用線程是很危險的事情。因為線程沒有執行完,BroadcastReceiver就掛了。

9.3 Service:和Activity屬于同一級別的組件,不能自己運行只能后臺運行,并且可以和其他組件進行交互。Service可以在很多場合的應用中使用,比如播放多媒體的時候啟動了其他Activity這個時候程序要在后臺繼續播放。ps:一個Service是一段長生命周期的,沒有用戶界面的程序,可以用來開發如監控類程序。

9.4 Content Provider:ContentProvider在android中的作用是對外共享數據,也就是說你可以通過ContentProvider把應用中的數據共享給其他應用訪問,其他應用可以通過ContentProvider對你應用的數據進行增刪改查。關于共享數據,可以使用文件操作模式,通過指定文件的操作模式為Context.MODEWORLDREADABLE 或 Context.MODEWORLDWRITEABLE同樣也可以對外共享數據。但是使用文件共享數據存在數據訪問方式不統一的問題。而Content Provider則對外暴露了統一的接口,每個應用程序都可以通過統一的接口操作數據。

10.常用的布局管理器:
布局管理器一般有四種:
LinearLayout:線性布局管理器(默認),分為水平(horizontal)和垂直(vertical)兩種,只能進行單行布局。
FrameLayout:所有組件放在左上角,一個覆蓋一個。
TableLayout:任意行和列的表格布局管理器,其中TableRow代表一行,可以向行中增加組件。
RelativeLayout:相對布局管理器,根據最近一個組件或者頂層父組件來確定下一個組件的位置。

11.Android應用程序是用java語言寫的,通過aapt工具把編譯好的java代碼和應用程序所需要的所有數據、資源文件打包成Android包,及后綴為.apk的壓縮文件,這個文件時發布應用程序和在移動設備上安裝應用程序的媒介,是用戶下載到他們設備上的文件。一個.apk文件中的所有代碼屬于一個應用程序。

10.ANR(Application No Response):程序無響應的錯誤信息。
11.Android體系結構:
官網體系結構圖:
Android從上到下分為4層:Android應用層,Android應用框架層,Android系統運行層,Linux內核層。
12.每一個Android應用程序都在自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik被設計成一個設備可以同時高效的運行多個虛擬系統。Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式文件針對小內存使用做了優化。同時虛擬機是基于寄存器的,所有的類都經由Java編譯器編譯,然后通過SDK中的“dx”工具轉化成.dex格式由虛擬機執行。

13.Android Activity 生命周期:
生命周期圖:

Resumed狀態:
在這種狀態下,該Activity在前臺運行,用戶可以與它進行交互。(有時也簡稱為“running”狀態。)
Paused狀態:
在這種狀態下,該Activity被部分遮蔽(被其他在前臺的半透明或不覆蓋整個屏幕的活動遮。。此狀態不接受用戶輸入,并且不能執行任何代碼。
Stopped狀態:
在這種狀態下,該活動是完全隱藏,不可見的,可視為存在于后臺。雖然停止,活動實例和所有成員變量如狀態信息將被保留,但不能執行任何代碼。
14.(1)當程序第一次運行時用戶會看到主Activity,主Activity可以通過氣筒其他的Activity進行相關操作。(2)當啟動其他的Activity時當前的Activity將會停止,新的Activity將會壓入棧中,同時獲取用戶焦點,這時就可在這個Activity上操作了。(3)根據棧的先進后出原則,當用戶按Back鍵時,當前這個Activity銷毀,前一個Activity重新恢復。

15.Activity 之間傳遞數據的幾種方式:
(1) 將數據封裝在Intent變量中。(使用Intent傳遞對象有一個局限性,就是不能傳遞不能序列化的對象)
(2) 使用系統的剪切板來傳遞數據。
獲取剪切板的代碼如下:

ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

(3) 使用全局變量來傳遞數據:
例如:

//myApp是一個應用級別的全局對象,在應用的任何地方都可以調用這個對象。 
MyApp myApp = (MyApp)getApplication();

(4) 使用靜態變量傳遞數據:可以在目標的 Activity 中,聲明公開的靜態屬性,在調用的Activity針對這個屬性進行賦值,來進行數據的傳遞。

16.從Activity中返回數據: (1) startActivity():用于啟動意圖。
(2) startActivityForResult():啟動意圖并獲取返回結果。在等待返回結果的Activity中必須實現onActivityResult方法。

17.finish方法用來結束Activity的生命周期。

二、實現DEMO:
1.利用Intent在兩個Activity之間傳遞數據:
關鍵代碼 在源碼包添加調用者和被調用者的 Activity java類:

調用者 Main.java:
@Override
public class Main extends Activity {

    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加載布局文件
        setContentView(R.layout.main);
        button = (Button)this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Main.this,OtherActivity.class);
                //在意圖中傳遞數據
                intent.putExtra("name", "張三");
                intent.putExtra("age", 123);
                intent.putExtra("address", "北京");
                //啟動意圖
                startActivity(intent);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

被調用者 OtherActivity.java:
public class OtherActivity extends Activity {

    private TextView textView;

    public OtherActivity() {

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other);
        textView = (TextView)this.findViewById(R.id.msg);
        Intent intent = getIntent();
        int age = intent.getIntExtra("age", 0);
        String name = intent.getStringExtra("name");
        String address = intent.getStringExtra("address");

        textView.setText("age -->>"+age+"\n"+"name-->>"+name+"\n addresss-->>"+address);

    }
}

在res的layout目錄下配置兩個布局配置文件:

主Activity的配置文件 main.xml 中添加:
 

在Mainifest.xml程序清單中添加Activity的配置。全部配置完畢后就完成了一個Activity通過Intent傳遞信息到另一個Activity的過程。

效果圖: 調用者:
被調用者:


相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片