標籤:
Android系統架構
Android大致可以分為四層架構,五塊地區
1.Linux核心層
Android系統是基於Linux核心的,這一層為Android裝置的各種硬體提供了底層的驅動,如顯示驅動、音頻驅動、照相機驅動、Wi-Fi驅動、電源管理等。
2.系統運行庫層
這一層通過一些C/C++庫來為Android系統提供了主要的特性支援。如SQLite庫提供了資料庫的支援,OpenGL|ES庫提供了3D繪圖的支援,Webkit庫提供了瀏覽器核心的支援等。
同樣在這一層還有Android執行階段程式庫,他主要提供了一些核心庫,能夠允許開發人員使用Java語言來編寫Android應用。另外Android執行階段程式庫中還包含了Dalvik虛擬機器執行個體。相較於Java虛擬機器,Dalvik是專門為行動裝置定製的,它針對手機記憶體、CPU效能有限等情況做了最佳化處理。
3.應用程式框架層
這一層主要提供了構建應用程式時可能用到的各種API,Android內建的一些核心應用就是使用這些API完成的,開發人員也可以通過使用這些API來構建自己的應用程式。
4.應用程式層
所有安裝在手機上的應用程式都是屬於這一層的,比如系統內建的連絡人、簡訊等程式,或者是你從Google Play上下載的小遊戲,當然還包括你自己開發的程式。
requestWindowFeature(Window.FEATURE_NO_TITLE)
不在活動中顯示標題列
注意這句代碼一定要在setContentView()之前執行,不然會報錯。
在活動中使用Menu
首先在res目錄下建立一個menu檔案夾,在這個檔案夾下面建立一個名叫main的菜單檔案main.xml
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add_item" android:title="Add" /> <item android:id="@+id/remove_item" android:title="Remove" /> </menu>
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present.// getMenuInflater().inflate(R.menu.menu_main, menu); getMenuInflater().inflate(R.menu.main, menu); // 返回true表示允許建立的菜單顯示出來 返回false建立的菜單將無法顯示 return true; }
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.add_item: Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show(); break; case R.id.remove_item: Toast.makeText(this, "you clicked Remove", Toast.LENGTH_LONG).show(); break; default: } return true; }
@Override public void onClick(View v) { finish(); }
可用於銷毀一個活動
Intent(Context packageContext, Class<?> cls)
顯式Intent
Intent intent = new Intent(MAinActivity.this, SecondActivity.class); startActivity(intent);
隱式Intent
每個Intent中只能指定一個action,但卻能指定多個category
<intent-filter> <action android:name="com.example.activity.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.example.activity.MY_CATEGORY" /> </intent-filter>
Intent intent = new Intent("com.example.activity.ACTION_START");intent.addCategory("com.example.activity.MY_CATEGORY");startActivity(intent);
使用隱式Intent開啟網頁
Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.baidu.com"));startActivity(intent);
<activity android:name=".ThirdActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> </intent-filter> </activity>
調用系統撥號介面
Intent intent = new Intent(Intent.ACTION_DIAL);intent.setData(Uri.parse("tel:10086"));
向下一個活動傳遞資料
String data = "Hello SecondActivity";Intent intent = new Intent(MainActivity.this, SecondActivity.class);intent.putExtra("extra_data", data);startActivity(intent);
Intent intent = getIntent();String data = intent.getStringExtra("extra_data");
返回資料給上一個活動
Intent intent = new Intent(MainActivity.this, SecondActivity.class);// 1為請求碼startActivityForResult(intent, 1);
Intent intent = new Intent();intent.putExtra("data_return", "Hello MainActivity");// 第一個參數用於向上一個活動返回處理結果,一般只使用RESULT_OK或RESULT_CANCELED這兩個值setResult(RESULT_OK, intent);finish();
由於我們是使用startActivityForResult()方法來啟動SecondActivity的,在SecondActivity被銷毀之後會回調上一個活動的onActivityResult()方法
因此我們需要在MainActivity中重寫onActivityResult()方法
/** * requestCode 請求碼 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (resultCode == RESULT_OK) { String returnedData = data.getStringExtra("data_return"); Log.d("MainActivity", returnedData); } break; default: } }
通過按Back鍵返回資料
重寫onBackPressed()方法
@Overridepublic void onBackPressed() {Intent intent = new Intent();intent.putExtra("data_return", "Hello MainActivity");setResult(RESULT_OK, intent);finish();}
Android雜記(一)