Android-Context 介绍

一、什么是Context ?

在 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。

 二、如何获取 Context?

在 Activity 中:可以直接使用 this 或 getApplicationContext()

在 Fragment 中:可以使用 getActivity() 或 getContext();
在自定义 View 中:可以通过构造函数传递 Context。

三、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();
        }
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值