編輯:Android開發實例
Android特性:
框架:
應用程序部件:
Manifest 文件
整個程序的功能清單,包括包的定義、版本聲明,應用程序Activity、ICON、service、intent filter等的聲明。
在Eclipse中可以通過Manifest Editor方便編輯(右鍵打開)。
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
<application . . . >
<activity android:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel"
. . . >
</activity>
. . .
</application>
</manifest>
Activities and Tasks
一個task就是用戶感覺上的"應用程序",task 是一組相互關聯的activity集合組成的棧(這些activity可能屬於多個應用程序). 棧底就是應用程序啟動時顯示的第一個activity。棧頂activity就是用戶在屏幕上看到的activity。當一個activity啟動一個新的activity時,新的activity就會被壓入棧中。當用戶點擊"back " 按鈕時,位於棧頂的activity將會被彈出棧。我們舉個例子,假設task中有兩個activity,分別是 A 和 B,其中A是位於棧頂的activity,用戶點擊"back"後, A就被彈出棧, B 就成為了新的棧頂activity,然後 activity B 會顯示在屏幕上。
通常來講,task棧中的activity不會被改變排列順序,只有出棧和入棧操作。
A task is a stack of activities, not a class or an element in the manifest file. So there's no way to set values for a task independently of its activities. Values for the task as a whole are set in the root activity. For example, the next section will talk about the "affinity of a task"; that value is read from the affinity set for the task's root activity.
一個task中的所有activity是作為一個整體來移動的--移到前台後者後台。就個例子,假設當前 task 棧中有ABCD4個activity,A是棧頂activity,也就是在屏幕上顯示的activity,用戶點擊了"home"鍵,啟動了一個新的應用程序,則 ABCD 4個activity都會被移動到後台。過了一會,用戶又點擊了"home"鍵,並重新選擇了先前的程序,則 ABCD 都被移動到前台,A 仍然作為棧頂activity 被顯示在屏幕上,然後用戶點擊了"back",A被彈出棧,B作為新的棧頂activity被顯示在屏幕上。
前面所講的都是task的默認行為,我們可以通過某些方法改變task 的默認行為。
不同的task裡的activity是由affinity來區別的.默認情況下每個task裡面的activities都有相同的affinity。但是可以通過<activity> 標簽裡taskAffinity屬性來修改某個activity的affinity,此時需要設置FLAG_ACTIVITY_NEW_TASK標志,並且allowTaskReparenting 屬性設置為true。關於這點的文檔解釋是:As described earlier, a new activity is, by default, launched into the task of the activity that called startActivity()
. It's pushed onto the same stack as the caller. However, if the Intent object passed to startActivity()
contains the FLAG_ACTIVITY_NEW_TASK
flag, the system looks for a different task to house the new activity. Often, as the name of the flag implies, it's a new task. However, it doesn't have to be. If there's already an existing task with the same affinity as the new activity, the activity is launched into that task. If not, it begins a new task.
注意:在使用FLAG_ACTIVITY_NEW_TASK屬性(singleTask和singleInstance類似)時,無法回退到調用者。
activity在task中加載方式主要有四種:
1.standard(the default mode):一個intent發過來之後,都會產生一個新的activity來響應這個intent;
2.singleTop:保持stack頂端的那個activity.也就是說,如果一個intent是由stack頂端的activity處理的話,將不會新建一個新的activity來處理,而是由原來的那個activity處理;
3.singleTask:對於這個activity則會新建一個task.也就是說,對於這個activity,會分配一個新的affinity;
4.singleInstance:identical to "singleTask
",並保證這個activity唯一.
既然對初始加載的過程有所規定,那麼也就很自然地會有結束過程的一些方式:
acitivity在退出的時候,必然會影響到task的stack,因此,android對acitivity的行為方式也做了規定.
1.alwaysRetainTaskState屬性.保證stack不變.默認狀態下,一個task長期不活動的話,會退化到root activity,也就是彈出stack,只保留底部的一個acitivity.
2.clearTaskOnLaunch屬性.這個會在acitivity加載的時候清空task的stack.
3.finishOnTaskLaunch屬性.某種程度上說這個屬性保證了某項task是唯一的.因為當一個同類的task加載的時候,如果此屬性為true,那麼就會先退出之前的task,然後再加載這個task.
如果FLAG_ACTIVITY_CLEAR_TOP屬性為真,則結束activity時,所有處於該activity堆棧之上的activity都會同時清除,FLAG_ACTIVITY_CLEAR_TOP is most often used in conjunction with FLAG_ACTIVITY_NEW_TASK. When used together, these flags are a way of locating an existing activity in another task and putting it in a position where it can respond to the intent.
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
中國科學院開源協會鏡像站地址: IPV4/IPV6: http://mirrors.opencas.cn 端口:80 IPV4/IPV6: http://mirr
二、創建樣式 日歷顯示的表格線,使用 Cell 填充圖形的邊框來實現,為了統一,我們先定義邊框線的顏色及線條精細。 另外還要定義一系統填充樣式等。 創建 colo
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我