編輯:高級開發
使用Bundle在Activity間傳遞數據
從源Activity 中傳遞數據
Java代碼
1. //數據寫入Intent
2. Intent openWelcomeActivityIntent=new Intent();
3. Bundle myBundelForName=new Bundle();
4. myBundelForName.putString("Key_Name",inName.getText().toString());
5. myBundelForName.putString("Key_Age",inAge.getText().toString());
6. openWelcomeActivityIntent.putExtras(myBundelForName);
7. openWelcomeActivityIntent.setClass(androidBundel.this, Welcome.class);
8. startActivity(openWelcomeActivityIntent);
//數據寫入Intent
Intent openWelcomeActivityIntent=new Intent();
Bundle myBundelForName=new Bundle();
myBundelForName.putString("Key_Name",inName.getText().toString());
myBundelForName.putString("Key_Age",inAge.getText().toString());
openWelcomeActivityIntent.putExtras(myBundelForName);
openWelcomeActivityIntent.setClass(androidBundel.this, Welcome.class);
startActivity(openWelcomeActivityIntent);
目標Activity 中獲取數據
Java代碼
1. //從Intent 中獲取數據
2. Bundle myBundelForGetName=this.getIntent().getExtras();
3. String name=myBundelForGetName.getString("Key_Name");
4. myTextVIEw_showName.setText("歡迎您進入:"+name);
//從Intent 中獲取數據
Bundle myBundelForGetName=this.getIntent().getExtras();
String name=myBundelForGetName.getString("Key_Name");
myTextVIEw_showName.setText("歡迎您進入:"+name);
使用Bundle在Activity間傳遞數據2
從源請求Activity 中通過一個Intent 把一個服務請求傳到目標Activity 中
Java代碼
1. private Intent toNextIntent;//Intent 成員聲明
2. toNextIntent=new Intent();//Intent 定義
3. toNextIntent.setClass(TwoActivityME3.this, SecondActivity3.class);
接上頁
4. //設定開啟的下一個Activity
5. startActivityForResult(toNextIntent, REQUEST_ASK);
6. //開啟Intent 時候,把請求碼同時傳遞
private Intent toNextIntent;//Intent 成員聲明
toNextIntent=new Intent();//Intent 定義
toNextIntent.setClass(TwoActivityME3.this, SecondActivity3.class);
//設定開啟的下一個Activity
startActivityForResult(toNextIntent, REQUEST_ASK);
//開啟Intent 時候,把請求碼同時傳遞
在源請求Activity 中等待Intent 返回應答結果,通過重載onActivityResult()方法
第一個參數是你開啟請求Intent時的對應請求碼,可以自己定義。
第二個參數是目標Activity返回的驗證結果碼
第三個參數是目標Activity返回的Intent
目標Activity 中發送請求結果代碼,連同源Activity 請求的數據一同綁定到Bundle
中通過Intent 傳回源請求Activity 中
Log與DDMS(查看Log等信息)
Java代碼
1. @Override
2. protected void onActivityResult(int requestCode,
3. int resultCode, Intent data) {
4. // TODO Auto-generated method stub
5. super.onActivityResult(requestCode, resultCode, data);
6. if(requestCode==REQUEST_ASK){
7. if(resultCode==RESULT_CANCELED){
8. setTitle("Cancel****");
9. }else if(resultCode==RESULT_OK){
10. showBundle=data.getExtras();//從返回的Intent中獲得Bundle
11. Name=showBundle.getString("myName");//從bundle中獲得相應數據
12. text.setText("the name get from the second layout:"+Name);
13. }
14. }
15. }
@Override
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REQUEST_ASK){
if(resultCode==RESULT_CANCELED){
setTitle("Cancel****");
接上頁
}else if(resultCode==RESULT_OK){
showBundle=data.getExtras();//從返回的Intent中獲得Bundle
Name=showBundle.getString("myName");//從bundle中獲得相應數據
text.setText("the name get from the second layout:"+Name);
}
}
}
Java代碼
1. backIntent=new Intent();
2. stringBundle=new Bundle();
3. stringBundle.putString("myName", Name);
4. backIntent.putExtras(stringBundle);
5. setResult(RESULT_OK, backIntent);//返回Activity結果碼
6. finish();
backIntent=new Intent();
stringBundle=new Bundle();
stringBundle.putString("myName", Name);
backIntent.putExtras(stringBundle);
setResult(RESULT_OK, backIntent);//返回Activity結果碼
finish();
Java代碼
1. Log.v("TAG", "nextPage_Activity onStart()");//設置標簽來跟蹤程序
Log.v("TAG", "nextPage_Activity onStart()");//設置標簽來跟蹤程序
Activity生命周期
Activity 狀態
① 當一個Activity 在屏幕的最上層時(對堆棧的最頂端),它就是屬於active 或者running 的狀態
② 如果一個Activity 失去焦點(focus)但還看得到它的畫面(比如:一個新的Activity 畫面並不是全
屏幕或者它是一個半透明的情況),那失去焦點的Activity 則處在paused 的狀態。像這個失去焦點的Activity
它還是完全活著的,並沒有消失。(活著的意思是指,Activity 自己本身所有的狀態及數據都還是存在的,也
跟窗口管理程序window manager 保持聯系著),像這種paused 的Activity,會在一種情況下消失,那就是當
系統的內存不夠用之時,系統會自動判斷,八部重要的Activity 移除。
③ 如果一個Activity 被其它的Activity 完全的遮蓋住時,它仍然保有全部的狀態及數據,但因為它已
不再被使用者看見,所以它的畫面是被隱藏起來的(畫面不需要更新),當系統內存不足時,這種stop 狀態
的Activity 時最先被系統考慮拿下來釋放內存的。
④ 當一個Activity 處於pause 或stop 的狀態時,系統可以要求Activity 結束(finish)或直接移除(kill)
接上頁
它。當它需要再度呈現在使用者面前時,它必須要能完整的重新啟動及回復先前的狀態。
Activity 狀態轉換圖
android應用開發4使用Service
什麼是服務(Service)
服務是運行在後台的一段代碼。它可以運行在它自己的進程,也可以運行在其他應用程序的上下文
(context)裡面,這取決於自身的需要。其他的組件可以綁定到一個服務(Service)上面,通過遠程過程調
用(RPC)來調用這個方法。例如:媒體播放器的服務,當用戶退出媒體選擇用戶界面,仍然希望音樂可以
繼續播放,這時就是由服務(Service)來保證當用戶界面關閉時音樂繼續播放的。
如何使用服務
第一種是通過調用Context.startServece()啟動,調用Context.stoptService()結束,startService()可以傳遞參
數給Service。
第二種方式是通過調用Context.bindService()啟動,調用Context.unbindService()結束,還可以通過
ServiceConnection 訪問Service。二者可以混合使用,比如說我可以先startServece()再unbindService()。
Service的生命周期
startService()後,即使調用startService()的進程結束了,Service 仍然還存在,知道有進程調用
stoptService(),或者Service 自己自殺(stopSelf())就沒法了
bindService()後,Service 就和調用bindService()的進程同生共死,也就是說當調用bindService()的進
程死了,那麼它bind 的Service 也要跟著被結束,當然期間也可以調用unbindService()讓Service 結
束
兩種方式混合使用時,比如說你startService()了,我bindService()了,那麼只有你stoptService()了而
且我也unbindService()了,這個Service 才會被結束。
進程生命周期
android 系統將會嘗試保留那些啟動了的或者時綁定了的服務進程
如果該服務正在進程的onCreate(),onStart()或者onDestroy()這些方法中執行時,那麼主進程將會成為
一個前台進程,以確保此代碼不會被停止
如果服務已經開始,那麼它的主進程會就重要性而言低於所有可見的進程但高於不可見的進程,由
於只有少數幾個進程是用戶可見的,所以只要不是內存特別低,該服務不會停止。
如果有多個客戶端綁定了服務,只要客戶端中的一個對於用戶是可見的,即認為該服務可見
接上頁
使用服務進行音樂播放
Manifest.XML
中的Service
定義
XML代碼
1. < service android:name=".Music">
2. < intent-filter>
3. < action android:name="com.liangshan.wuyong.START_AUDIO_SERVICE" />
4. < category android:name="android.intent.category.default" />
5. < /intent-filter>
6. < /service>
< service android:name=".Music">
< intent-filter>
< action android:name="com.liangshan.wuyong.START_AUDIO_SERVICE" />
< category android:name="android.intent.category.default" />
< /intent-filter>
< /service>
Service 子類
中的Player
Java代碼
1. public void onStart(Intent intent, int startId) {
2. super.onStart(intent, startId);
3. player = MediaPlayer.create(this, R.raw.seven_days);
4. player.start();
5. }
6. public void onDestroy() {
7. super.onDestroy();
8. player.stop();
9. }
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
player = MediaPlayer.create(this, R.raw.seven_days);
player.start();
}
public void onDestroy() {
super.onDestroy();
player.stop();
}
Activity 中定
義的Intent
開啟相應的
Service
引用
startService(new Intent("com.liangshan.wuyong.START_AUDIO_SERVICE"));
stopService(new Intent("com.liangshan.wuyong.START_AUDIO_SERVICE"));
androidUI布局
Activity
android 應用程序基本功能單元
本身沒有任何屏幕存在
View 和VIEwgroup
表示在android 平台上的基本用戶界面單元
VIEws
接上頁
android.view.VIEw
為指定的屏幕矩形區域存儲布局和內容
處理尺寸和布局,繪制,焦點改變,翻屏,按鍵、手勢
widget 基類
VIEwgroups
android.view.VIEwgroup
包含並管理下級系列的Views 和其他VIEwgroup
布局的基類
UI樹狀結構
android 中的Activity
定義使用一個view 和IEwgroup 的樹狀節點
setContentVIEw()方法
被Activity 調用來把樹狀節點連接到屏幕渲染
文本TextVIEw 輸入框EditText
輸入法InputMethod 活動方法MovementMethod
按鈕Button 單選按鈕RadioButton
復選框Checkbox 滾動視圖ScrollVIEw
LayoutParams (布局參數)
每一個viewgroup 類使用一個繼承於VIEwGroup.LayoutParams 的嵌套類
包含定義了子節點VIEw 的尺寸和位置的屬性類型
普通布局對象
FrameLayout
最簡單的布局對象
在屏幕上故意保留的空白空間,你可以之後填充一個單獨的對象
例如:一個你要更換的圖片
所有子元素都釘到屏幕的左上角
不能為子元素指定位置
LinearLayout
在一個方向上(垂直或水平)對齊所有子元素
所有子元素一個跟一個地堆放
一個垂直列表每行將只有一個子元素(無論它們有多寬)
一個水平列表只是一列的高度(最高子元素的高度來填充)
TableLayout
把子元素放入到行與列中
不顯示行、列或是單元格邊界線
單元格不能橫跨行,如Html 中一樣
AbsoluteLayout
使子元素能夠指明確切的X / Y 坐標顯示在屏幕上
(0,0)是左上角
當你下移或右移時,坐標值增加
允許元素重疊(但是不推薦)
注意:
一般建議不使用AbsoluteLayout 除非你有很好的理由來使用它
因為它相當嚴格並且在不同的設備顯示中不能很好地工作
RelativeLayout
讓子元素指定它們相對於其他元素的位置(通過ID 來指定)或相對於父布局對象
androidManifest.XML 中修改程序布局的Theme 主題
XML代碼
接上頁
1. < ?XML version="1.0" encoding="utf-8"?>
2. < manifest
3. XMLns:android="http://schemas.android.com/apk/res/android"
4. package="zyf.GridVIEwTest"
5. android:versionCode="1"
6. android:versionName="1.0">
7. < application android:icon="@drawable/icon"
8. android:theme="@android:style/Theme.Light"
9. android:label="@string/app_name" >
10. < activity android:name=".GridVIEwTest"
11. android:label="@string/app_name" >
12. < intent-filter>
13. < action android:name="android.intent.action.MAIN" />
14. < category
15. android:name="android.intent.category.LAUNCHER" />
16. < /intent-filter>
17. < /activity>
18. < /application>
19. < uses-sdk android:minSdkVersion="2" />
20. < /manifest>
當我們創建一個帶EditText 或 AutoCompleteTextVIEw的視圖時,在加載視圖時總是會把輸入的焦點自動移動到第一個輸入框。如下圖所示:
2010年Google android手機操作系統的最大臂助非HTC莫屬,我們來首先來回顧下android的發展歷程。 2008 年 10 月HTC推出了全球首款and
android系統為研發數據庫的技術人員對Team System承諾,提供相關工具,這樣可以為整個軟件開發周期少了不少彎路,降低工作的復雜性,尤其是智能手機,安裝及使用
谷歌是為了服務而服務的,既然這樣的話,那還不如去支持iPhone呢,至少能在軟件商店裡多賣一點錢,而且喬布斯看上去也更酷一點,這樣android浏覽器在浏覽器內的名聲將