zoukankan      html  css  js  c++  java
  • 关于Android Context一些总结

    1.首先什么是context?

    文档语焉不详,说是resource什么的,反正是没看懂,实际上可以认为它是一个指向parent对象的指针,受到那个parent对象的控制。

    2.为什么需要context?

    试想一下这个语句:

    Button myButton =newButton(this);

    这个this就是context,前面说了它指向了parent对象,那指向了哪里?为什么需要这么做?原因是Button为了能完成自己的使命(响应各种操作)就得让Android系统知道自己是属于哪个Activity的,这个信息是必须的,因为只有这样Android系统才会对其进行管理,比如响应onClick()事件,否则系统连Button是属于哪个Activity的都不知道,怎么响应呢?如果Button的context和Activity的context是一样的,那么它们都是可见的,比如上面那个button跟Activity一样是可见的,它们的context指向另一个不可见的对象,也就是它们受那个不可见的对象控制,我理解为系统。

    3.Application context和Activity context。

    这是两种不同的context,也是最常见的两种。第一种中context的生命周期与Application的生命周期相关的,context随着Application的销毁而销毁,第二种中的context跟Activity的生命周期是相关的,但是对一个Application来说,Activity可以销毁几次,那么属于Activity的context就会销毁多次。至于用哪种context,得看应用场景,个人感觉用Activity的context好一点,不过也有的时候必须使用Application的context。

    举例来说:SQLite建立时是需要context的,那么我们怎么传呢?

    一、建立SQLiteOpenHelper 的子类

    public class mySQLiteHelper extends SQLiteOpenHelper {

    ..........

    public DBOpenHelper(Context context, String name, CursorFactory factory,

    int version) {

    super(context, name, factory, version);

    // TODO Auto-generated constructor stub

    }

    .......

    }

    二、我们用另一个类封装一下这个类,完善数据查询、插入、删除、更新等操作,具体方法不表。

    public class DBManager {

    //定义上面那个类对象;

    private mySQLiteHelper dbHelper;

    //注意这里得定义一个context,你想直接得到是得不到的,需要调用这个类的对象自己传一个context过来,这个context再将得到的context传到mySQLiteHelper 那个类去。

    private Context context;

    //构造方法

    public DBManager (Context context) {

    this.context = context;

    dbHelper = new DBOpenHelper(context,DB_NAME,null,VERSION);

    db = dbHelper.getWritableDatabase();

    }

    }

     三、最后,我们在一个Activity中进行调用

    public class myActivity extends Activity {

    private DBManager db;

     public void onCreate(Bundle savedInstanceState) {

    ........

         //dbmgr = new DataManager(getApplicationContext()); 第一种

           dbmgr = new DataManager(this);  //第二种

    //两种方法都可以,第一种是Application的context,第二种是Activity的context

    .........

    }

    }

  • 相关阅读:
    统计nginx日志里访问次数最多的前十个IP
    while 格式化输出 运算符 字符编码
    Python 软件安装
    Python 基础
    Typora 基础的使用方法
    Django ORM (四) annotate,F,Q 查询
    Django 惰性机制
    Django ORM (三) 查询,删除,更新操作
    Django ORM (二) 增加操作
    Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍
  • 原文地址:https://www.cnblogs.com/colder/p/3791257.html
Copyright © 2011-2022 走看看