在 Android 中,Context 是一个接口,它提供了全局信息的访问权限,例如访问应用程序资源、启动新活动(Activity)、显示对话框等。常见的 Context 实现类包括 Activity和 Application。
1、常见的Context类
Activity Context:
生命周期与Activity相同,适用于UI相关的操作。
示例:this 或 MainActivity.this
Application Context:
生命周期与整个应用程序相同,适用于需要长时间存在的对象。
示例:getApplicationContext()
Service Context:
生命周期与Service相同,适用于后台任务。
示例:this在Service类中
注意事项:
避免内存泄漏:
不要在静态变量中保存Activity或Service的Context引用,因为这可能导致内存泄漏。推荐使用Application Context。
选择合适的Context类型:
例如,对于UI相关操作,使用Activity Context;对于非UI操作,使用Application Context。
在 Activity 中:可以直接使用 this 或 getApplicationContext()
在 Fragment 中:可以使用 getActivity() 或 getContext();
在自定义 View 中:可以通过构造函数传递 Context。
1、资源访问:
获取应用中的资源文件(如字符串、颜色、布局等)。
- String text = getResources().getString(R.string(R.string.app_name);
2、启动 Activity:
启动新的Activity或Service。
- Intent intent = new Intent(this, SecondActivity.class);
- startActivity(intent);
3、获取系统服务:
获取各种系统服务(如通知管理器、位置管理器等)。
- LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
4、 显示 Toast:
- Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show();
5、文件操作:
访问内部和外部存储。
示例:context.openFileInput("example.txt")
6、数据库操作:
打开或创建SQLite数据库。
示例:context.openOrCreateDatabase("mydb", Context.MODE_PRIVATE, null)
7、广播发送:
发送广播消息。
示例:context.sendBroadcast(new Intent("com.example.MY_ACTION"))
8、主题和样式:
应用主题和样式。
示例:context.getTheme()
- public class MainActivity extends AppCompatActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- // 使用Context获取资源
- String appName = getResources().getString(R.stringg.app_name);
- Log.d("MainActivity", "App Name: " + appName);
-
- // 使用Context启动新的Activity
- Intent intent = new Intent(this, SecondActivity.class);
- startActivity(intent);
-
- // 使用Context读取文件
- try {
- FileInputStream inputStream = openFileInput("example.txt");
- byte[] buffer = new byte[inputStream.available()];
- inputStream..read(buffer);
- String content = new String(buffer);
- Log.d("MainActivity", "File content: " + content);
- inputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-