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

    .........

    }

    }

  • 相关阅读:
    shutil使用
    python解压压缩包
    python配置主机名
    ansible加速不管用
    重启sshd服务
    shell脚本安装python、pip-----非交互式的--批量执行函数
    查看日志
    etcd安全集群三节点扩容至四个节点
    ssh免密登录
    行为型模式之状态模式
  • 原文地址:https://www.cnblogs.com/colder/p/3791257.html
Copyright © 2011-2022 走看看