Android Framework 初级教程
1. 简介
Android Framework 是 Android 操作系统的核心部分,它提供了开发 Android 应用程序所需的基础组件和 API。Android Framework 包括四大组件(Activity、Service、BroadcastReceiver、ContentProvider)以及其他重要的系统服务(如 WindowManager、PackageManager、ActivityManager 等)。
本教程将带你了解 Android Framework 的基本概念、架构、以及如何使用它来开发 Android 应用程序。
2. Android Framework 架构
Android Framework 的架构可以分为以下几个层次:
应用层(Application Layer):用户直接交互的应用程序,如电话、短信、浏览器等。
应用框架层(Application Framework Layer):提供开发应用程序所需的 API,包括四大组件、视图系统、资源管理器等。
系统运行库层(Native Layer):包括 C/C++ 库和 Android 运行时环境(ART/Dalvik 虚拟机)。
硬件抽象层(HAL):为硬件设备提供统一的接口。
Linux 内核层(Linux Kernel Layer):提供底层硬件驱动、内存管理、进程管理等。
3. Android Framework 核心组件
3.1 Activity
Activity 是 Android 应用程序的界面组件,用户通过 Activity 与应用程序进行交互。每个 Activity 都代表一个屏幕,开发者可以通过 setContentView() 方法来设置 Activity 的布局。
3.1.1 创建 Activity
java
复制
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
3.1.2 Activity 生命周期
Activity 的生命周期包括以下几个方法:
onCreate():Activity 创建时调用。
onStart():Activity 可见时调用。
onResume():Activity 获得焦点时调用。
onPause():Activity 失去焦点时调用。
onStop():Activity 不可见时调用。
onDestroy():Activity 销毁时调用。
3.2 Service
Service 是 Android 应用程序的后台组件,用于执行长时间运行的操作。Service 没有用户界面,可以在后台执行任务,即使应用程序不在前台运行。
3.2.1 创建 Service
java
复制
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 执行后台任务
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
3.2.2 启动 Service
java
复制
Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);
3.3 BroadcastReceiver
BroadcastReceiver 用于接收系统或应用程序发出的广播消息。广播可以是系统事件(如电池电量低、网络状态变化)或自定义事件。
3.3.1 创建 BroadcastReceiver
java
复制
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 处理广播
}
}
3.3.2 注册 BroadcastReceiver
java
复制
IntentFilter filter = new IntentFilter("com.example.MY_ACTION");
MyReceiver receiver = new MyReceiver();
registerReceiver(receiver, filter);
3.4 ContentProvider
ContentProvider 用于管理应用程序的数据共享。它提供了一种标准的方式,允许应用程序之间共享数据。
3.4.1 创建 ContentProvider
java
复制
public class MyContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
// 初始化 ContentProvider
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// 查询数据
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// 插入数据
return null;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
// 更新数据
return 0;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// 删除数据
return 0;
}
@Override
public String getType(Uri uri) {
// 返回 MIME 类型
return null;
}
}
3.4.2 使用 ContentProvider
java
复制
Uri uri = Uri.parse("content://com.example.provider/data");
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
4. Android Framework 系统服务
4.1 WindowManager
WindowManager 用于管理应用程序的窗口。它负责窗口的创建、显示、布局等操作。
4.1.1 获取 WindowManager
java
复制
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
4.2 PackageManager
PackageManager 用于管理应用程序的安装、卸载、更新等操作。它还提供了应用程序的元数据信息。
4.2.1 获取 PackageManager
java
复制
PackageManager packageManager = getPackageManager();
4.3 ActivityManager
ActivityManager 用于管理应用程序的 Activity 和任务栈。它提供了 Activity 的生命周期管理、任务栈管理等功能。
4.3.1 获取 ActivityManager
java
复制
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
5. Android Framework 资源管理
Android 应用程序的资源(如图片、字符串、布局文件等)都存储在 res 目录下。Android Framework 提供了资源管理器(Resources)来访问这些资源。
5.1 访问资源
java
复制
String appName = getResources().getString(R.string.app_name);
int color = getResources().getColor(R.color.primaryColor);
Drawable icon = getResources().getDrawable(R.drawable.ic_launcher);
5.2 资源类型
res/values/strings.xml:字符串资源。
res/values/colors.xml:颜色资源。
res/layout/:布局文件。
res/drawable/:图片资源。
6. Android Framework 事件处理
Android 应用程序通过事件处理机制来响应用户的操作。常见的事件包括点击事件、触摸事件、按键事件等。
6.1 点击事件
java
复制
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 处理点击事件
}
});
6.2 触摸事件
java
复制
View view = findViewById(R.id.view);
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 处理触摸事件
return true;
}
});
7. Android Framework 数据存储
Android 提供了多种数据存储方式,包括 SharedPreferences、SQLite 数据库、文件存储等。
7.1 SharedPreferences
SharedPreferences 用于存储简单的键值对数据。
7.1.1 存储数据
java
复制
SharedPreferences sharedPreferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("key", "value");
editor.apply();
7.1.2 读取数据
java
复制
SharedPreferences sharedPreferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
String value = sharedPreferences.getString("key", "default_value");
7.2 SQLite 数据库
SQLite 是 Android 内置的轻量级数据库,适用于存储结构化数据。
7.2.1 创建数据库
java
复制
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "my_database.db";
private static final int DATABASE_VERSION = 1;
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE my_table (id INTEGER PRIMARY KEY, name TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS my_table");
onCreate(db);
}
}
7.2.2 操作数据库
java
复制
MyDatabaseHelper dbHelper = new MyDatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 插入数据
ContentValues values = new ContentValues();
values.put("name", "John Doe");
db.insert("my_table", null, values);
// 查询数据
Cursor cursor = db.query("my_table", null, null, null, null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
}
cursor.close();
8. Android Framework 网络通信
Android 提供了多种网络通信方式,包括 HTTP 请求、WebSocket、Socket 等。
8.1 HTTP 请求
Android 提供了 HttpURLConnection 和 OkHttp 等库来进行 HTTP 请求。
8.1.1 使用 HttpURLConnection
java
复制
URL url = new URL("https://example.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
inputStream.close();
connection.disconnect();
8.1.2 使用 OkHttp
java
复制
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://example.com")
.build();
Response response = client.newCall(request).execute();
String responseBody = response.body().string();
9. Android Framework 多线程
Android 应用程序通常需要处理耗时操作(如网络请求、文件读写等),为了避免阻塞主线程,需要使用多线程。
9.1 使用 AsyncTask
AsyncTask 是 Android 提供的一个简单易用的多线程工具类。
java
复制
private class MyTask extends AsyncTask
@Override
protected String doInBackground(Void... voids) {
// 执行耗时操作
return "result";
}
@Override
protected void onPostExecute(String result) {
// 更新 UI
}
}
new MyTask().execute();
9.2 使用 HandlerThread
HandlerThread 是一个带有 Looper 的线程,适合处理需要长时间运行的任务。
java
复制
HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
handler.post(new Runnable() {
@Override
public void run() {
// 执行耗时操作
}
});
10. Android Framework 权限管理
Android 应用程序需要获取用户授权才能访问某些敏感资源(如相机、位置、联系人等)。
10.1 请求权限
java
复制
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE);
}
10.2 处理权限请求结果
java
复制
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限已授予
} else {
// 权限被拒绝
}
}
}
11. 总结
本教程介绍了 Android Framework 的基本概念、核心组件、系统服务、资源管理、事件处理、数据存储、网络通信、多线程和权限管理等内容。通过掌握这些知识,你可以更好地理解 Android 应用程序的开发流程,并能够开发出功能丰富的 Android 应用程序。
希望本教程对你有所帮助,祝你在 Android 开发的道路上越走越远!