[mobilesafe] 04_常用上下文getApplicationContext()-this-getContext()

Android 4.0

常用上下文getApplicationContext()-this-getContext()

弹出对话框
AlertDialog.Builder builder = new Builder(getApplicationContext());
使用上面的
getApplicationContext()会报下面的异常,但如果用this,就没事了。
10-26 12:23:14.944: E/AndroidRuntime(7882): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

public void click(View view) {
        // AlertDialog.Builder builder = new Builder(this);
        Toast.makeText(getApplicationContext(), "呵呵", 0).show();
        // AlertDialog.Builder builder = new Builder(getApplicationContext());
        //10-26 12:51:57.400: E/AndroidRuntime(1755): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
        // 对话框是activity的一部分 弹出对话框 不会执行onpasue方法
        // 对话框在创建的时候 必须要指定对话框挂载在哪个activity上.
        AlertDialog.Builder builder = new Builder(this);
        // this activity上下文的子类
        builder.setTitle("提醒!");
        builder.setMessage("您确定下载吗?");
        builder.setPositiveButton("确定"new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                System.out.println("确定。。。");
            }
        });
        builder.show();
    }

问题:如果一个Service,使用绑定的方式绑定到一个Activity上,如果使用的是this,由于this是表示一个Activity,所以它的生命周期很短,当Activity销毁时,service也会跟着销毁
Intent service = new Intent(this, MyService.class);
conn = new MyConn();
this.bindService(service, conn , Context.BIND_AUTO_CREATE);  
所以报出下面的异常
E/ActivityThread(6156): Activity cn.zengfansheng.contextdemo2.MainActivity has leaked ServiceConnection cn.zengfansheng.contextdemo2.MainActivity$1@a6acc8c0 that was originally bound here
如果使用
getApplicationContext()绑定在context中,只要该Context不挂掉,那么该Service会一直存活着。
1)getApplicationContext() 整个应用程序的上下文 父类
     凡事可以用getapplicationContext() 都可以用activity.this
    不同之处 特殊常见 什么时候 必须用 getAppliactionContext(); 活的时间非常的长.
2)activity.this 活的时间就短了
3)getContext(); 测试框架 内容提供者