积分网站建设,潮阳建设局网站,凡科网干嘛的,深圳网站搜索文章目录 深入分析 Android Activity (十)1. Activity 的资源管理1.1 使用资源 ID 访问资源1.2 Drawable 资源1.3 使用 TypedArray 管理资源1.4 使用资源配置 2. Activity 的数据存储2.1 SharedPreferences2.2 文件存储2.3 SQLite 数据库2.4 ContentProvider 3. Activity 的性能… 文章目录 深入分析 Android Activity (十)1. Activity 的资源管理1.1 使用资源 ID 访问资源1.2 Drawable 资源1.3 使用 TypedArray 管理资源1.4 使用资源配置 2. Activity 的数据存储2.1 SharedPreferences2.2 文件存储2.3 SQLite 数据库2.4 ContentProvider 3. Activity 的性能优化3.1 避免主线程阻塞3.2 优化布局3.3 内存优化3.4 性能监测工具 总结 深入分析 Android Activity (十)
1. Activity 的资源管理
在 Android 中资源管理是开发中不可忽视的一部分。合理地管理资源如布局、字符串、图像等可以显著提升应用的性能和可维护性。
1.1 使用资源 ID 访问资源
可以通过资源 ID 来访问资源文件如字符串、颜色、尺寸等。
// Accessing string resources
String myString getResources().getString(R.string.my_string);// Accessing color resources
int myColor getResources().getColor(R.color.my_color);// Accessing dimension resources
float myDimension getResources().getDimension(R.dimen.my_dimension);1.2 Drawable 资源
Drawable 资源用于定义应用中的图形元素。可以在 XML 文件中使用不同类型的 Drawable如 shape、selector、layer-list 等。
!-- res/drawable/rounded_corners.xml --
shape xmlns:androidhttp://schemas.android.com/apk/res/androidcorners android:radius8dp/solid android:color#FF0000/
/shape// Setting drawable resource to a view
ImageView imageView findViewById(R.id.my_image_view);
imageView.setImageResource(R.drawable.rounded_corners);1.3 使用 TypedArray 管理资源
TypedArray 用于访问一组类型相同的资源如在自定义 View 中定义属性。
!-- res/values/attrs.xml --
declare-styleable nameMyCustomViewattr namecustomText formatstring/attr namecustomColor formatcolor/
/declare-styleable// Accessing custom attributes in a custom view
TypedArray a context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
String customText a.getString(R.styleable.MyCustomView_customText);
int customColor a.getColor(R.styleable.MyCustomView_customColor, Color.BLACK);
a.recycle();1.4 使用资源配置
可以根据不同的设备配置提供不同的资源文件如不同语言、屏幕尺寸、屏幕密度等。
!-- res/values-en/strings.xml --
resourcesstring nameapp_nameMyApp/string
/resources!-- res/values-zh/strings.xml --
resourcesstring nameapp_name我的应用/string
/resources!-- res/values-sw600dp/strings.xml --
resourcesstring nameapp_nameMyApp for Tablets/string
/resources2. Activity 的数据存储
在 Android 中可以通过多种方式存储数据如 SharedPreferences、文件存储、SQLite 数据库、ContentProvider 等。
2.1 SharedPreferences
SharedPreferences 用于存储简单的键值对数据。
// Saving data to SharedPreferences
SharedPreferences sharedPreferences getSharedPreferences(MyPrefs, MODE_PRIVATE);
SharedPreferences.Editor editor sharedPreferences.edit();
editor.putString(key, value);
editor.apply();// Retrieving data from SharedPreferences
String value sharedPreferences.getString(key, default_value);2.2 文件存储
可以在内部或外部存储中存储文件。
// Saving a file to internal storage
String filename myfile.txt;
String fileContents Hello, World!;
FileOutputStream fos openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(fileContents.getBytes());
fos.close();// Reading a file from internal storage
FileInputStream fis openFileInput(filename);
InputStreamReader isr new InputStreamReader(fis);
BufferedReader bufferedReader new BufferedReader(isr);
StringBuilder stringBuilder new StringBuilder();
String line;
while ((line bufferedReader.readLine()) ! null) {stringBuilder.append(line);
}
String fileContents stringBuilder.toString();2.3 SQLite 数据库
SQLite 数据库用于存储结构化数据。
// Defining a SQLiteOpenHelper class
public class MyDatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME mydatabase.db;private static final int DATABASE_VERSION 1;public MyDatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE TABLE mytable (id INTEGER PRIMARY KEY, name TEXT));}Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL(DROP TABLE IF EXISTS mytable);onCreate(db);}
}// Using the database
MyDatabaseHelper dbHelper new MyDatabaseHelper(this);
SQLiteDatabase db dbHelper.getWritableDatabase();
ContentValues values new ContentValues();
values.put(name, John Doe);
long newRowId db.insert(mytable, null, values);2.4 ContentProvider
ContentProvider 用于在应用间共享数据。
// Querying data from a ContentProvider
Uri uri Uri.parse(content://com.example.myprovider/mytable);
Cursor cursor getContentResolver().query(uri, null, null, null, null);
if (cursor ! null) {while (cursor.moveToNext()) {String name cursor.getString(cursor.getColumnIndex(name));}cursor.close();
}3. Activity 的性能优化
性能优化是确保应用流畅运行的重要步骤。可以通过以下方法进行性能优化
3.1 避免主线程阻塞
在主线程中进行耗时操作会导致应用卡顿。可以使用 AsyncTask、HandlerThread、IntentService 等在后台线程执行耗时操作。
// Using AsyncTask to perform background operations
private class MyAsyncTask extends AsyncTaskVoid, Void, String {Overrideprotected String doInBackground(Void... voids) {// Perform background operationreturn Result;}Overrideprotected void onPostExecute(String result) {// Update UI with result}
}new MyAsyncTask().execute();3.2 优化布局
复杂的布局会影响性能。可以使用 Hierarchy Viewer 工具分析和优化布局。
!-- Using ConstraintLayout to optimize layout --
ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentTextViewandroid:idid/textViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textHello, World!app:layout_constraintTop_toTopOfparentapp:layout_constraintStart_toStartOfparent/
/ConstraintLayout3.3 内存优化
内存优化可以防止内存泄漏和应用崩溃。
// Using LruCache for caching images
LruCacheString, Bitmap memoryCache new LruCacheString, Bitmap(cacheSize) {Overrideprotected int sizeOf(String key, Bitmap bitmap) {return bitmap.getByteCount() / 1024;}
};public void addBitmapToMemoryCache(String key, Bitmap bitmap) {if (getBitmapFromMemCache(key) null) {memoryCache.put(key, bitmap);}
}public Bitmap getBitmapFromMemCache(String key) {return memoryCache.get(key);
}3.4 性能监测工具
可以使用 Android Profiler、Systrace、GPU Profiler 等工具监测和分析性能。
// Enabling StrictMode to detect performance issues
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());总结
通过对 Android Activity 的深入理解和灵活应用可以实现丰富的用户体验和高效的应用程序。理解其生命周期、权限管理、数据传递、动画效果、导航和返回栈管理、资源管理、配置变更处理、视图层次结构、性能优化、内存管理、测试、Service 交互、BroadcastReceiver 交互、深度链接、任务返回栈管理、资源管理、数据存储和性能优化等方面的知识有助于开发出性能优异且用户友好的应用程序。不断学习和实践这些知识可以提升应用程序的质量和用户满意度。
继续深入探讨 Android 的其他部分包括系统服务、组件通信、高级动画、性能调优等将进一步提升应用开发能力和水平。 欢迎点赞|关注|收藏|评论您的肯定是我创作的动力