Android Framework 初级教程

📅 2025-10-28 11:05:23 ✍️ admin 👁️ 7518 ❤️ 104
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 开发的道路上越走越远!