Android 常用代码
Android 开发涉及多个方面,包括界面设计、网络请求、数据存储、传感器使用等,本文将介绍一些常用的 Android 代码片段,帮助开发者快速上手和解决常见问题。
Activity 生命周期
了解 Activity 的生命周期是 Android 开发的基础,以下是一个简单的 Activity 生命周期示例:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化代码 } @Override protected void onStart() { super.onStart(); // Activity 变为可见时调用 } @Override protected void onResume() { super.onResume(); // Activity 准备好与用户交互时调用 } @Override protected void onPause() { super.onPause(); // 系统准备启动或恢复另一个 Activity 时调用 } @Override protected void onStop() { super.onStop(); // Activity 不再可见时调用 } @Override protected void onDestroy() { super.onDestroy(); // Activity 被销毁前调用 } }
权限请求
在 Android 6.0(API 级别 23)及以上版本中,需要在运行时请求敏感权限,以下是请求相机权限的示例:
private static final int REQUEST_CAMERA = 100; private void requestCameraPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA); } else { // 权限已被授予,执行相关操作 } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CAMERA) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限被授予,执行相关操作 } else { // 权限被拒绝,提示用户或进行其他操作 } } }
RecyclerView 适配器
RecyclerView 是 Android 中用于显示大量数据的高效视图,以下是一个简单的 RecyclerView 适配器示例:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<String> dataList; public MyAdapter(List<String> dataList) { this.dataList = dataList; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.textView.setText(dataList.get(position)); } @Override public int getItemCount() { return dataList.size(); } static class MyViewHolder extends RecyclerView.ViewHolder { TextView textView; public MyViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); } } }
异步任务(AsyncTask)
AsyncTask 用于在后台线程中执行耗时操作,并在主线程中更新 UI,以下是一个使用 AsyncTask 下载图片的示例:
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { @Override protected Bitmap doInBackground(String... urls) { return downloadImage(urls[0]); } @Override protected void onPostExecute(Bitmap result) { // 更新 UI,例如设置 ImageView 的图片 imageView.setImageBitmap(result); } private Bitmap downloadImage(String url) { // 实现图片下载逻辑,这里只是示例,返回 null return null; } }
5. SharedPreferences 存储数据
SharedPreferences 是 Android 提供的一种轻量级数据存储方式,适用于保存简单的配置信息,以下是使用 SharedPreferences 保存和读取数据的示例:
// 保存数据 SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("username", "JohnDoe"); editor.apply(); // 读取数据 String username = sharedPreferences.getString("username", "defaultUsername");
SQLite 数据库操作
SQLite 是 Android 支持的一种嵌入式关系数据库,以下是使用 SQLiteOpenHelper 创建和管理数据库的示例:
public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydatabase.db"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "users"; private static final String COLUMN_ID = "id"; private static final String COLUMN_NAME = "name"; private static final String COLUMN_AGE = "age"; public MyDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String createTable = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_NAME + " TEXT," + COLUMN_AGE + " INTEGER)"; db.execSQL(createTable); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } }
7. 广播接收器(BroadcastReceiver)
广播接收器用于响应全局广播事件,例如设备启动完成、电池电量低等,以下是一个简单的广播接收器示例:
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_POWER_CONNECTED)) { // 处理电源连接事件 } else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) { // 处理电源断开事件 } } }
要在清单文件中注册广播接收器:
<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> </intent-filter> </receiver>
服务(Service)
服务用于在后台执行长时间运行的操作,而不需要与用户交互,以下是一个简单的服务示例:
public class MyService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { // 服务启动后执行的代码 return START_STICKY; // 服务被终止后自动重启 } @Override public void onDestroy() { super.onDestroy(); // 服务销毁前执行的代码 } @Nullable @Override public IBinder onBind(Intent intent) { return null; // 此服务不绑定到客户端应用组件 } }
要在清单文件中声明服务:
<service android:name=".MyService" />
9. ContentProvider 实现数据共享
ContentProvider 用于在不同应用程序之间共享数据,以下是一个简单的 ContentProvider 示例:
public class MyContentProvider extends ContentProvider { @Override public boolean onCreate() { // 初始化代码,通常用于创建数据库或打开文件等 return true; // 如果提供程序成功创建返回 true,否则返回 false } @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { // 查询数据并返回 Cursor,这里是示例代码,实际应从数据库或其他数据源获取数据 return null; } // 其他方法根据需要实现,如 insert、update、delete 等 }
要在清单文件中声明 ContentProvider:
<provider android:name=".MyContentProvider" android:authorities="com.example.app.provider" />
到此,以上就是小编对于“android常用代码”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1296813.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复