《第一行代码》第二版 学习总结33 全局获取Context对象

      最近利用下班时间,找了看什么书比较适合初学android的朋友,很多人推荐了《第一行代码》这本书,于是就买了一本,感觉看书,思考,动手,再思考和总结这样过程还是很有必要的,于是就打算把自己学习的东西简单的总结一下;方便自己以后查找,也有利于学习的巩固。在这里首先要感谢一下书籍的作者——郭霖前辈。

      今天主要介绍一下书中关于全局获取Context对象的方法,因为我没有做深入的调研,今天先简单的记录一下实现的方法。

1,实现步骤

  • 第一步:自定义一个类继承Application类
  • 第二步:在自定义类中添加一个Context类型的静态全局成员变量,重写onCreate()方法,通过getApplicationContext()方法对其初始化
  • 第三步:在自定义类中添加一个静态方法getContext(),用于外界获取该Context对象
  • 第四步:在注配置文件AndroidManifest.xml文件中的Application下,把自定义的类通过android:name添加进去
  • 第五步:在应用的任何需要Context对象的地方,直接调用自定义类中的静态方法即可。

简要的注解:每一个应用在开启的时候,都会初始化一个Application(有且仅有一个)对象,不在主配置文件中配置也会默认初始化一个,只是没有在应用层面实现对Context对象的获取的静态方法;所以这里我们自定义了一个具有该功能的Application子类并配置在了主配置文件中,所以在开启程序的时候,会初始化一个自定义类的实例,然后走onCreate()方法,这样自定义类中的Context对象就被初始化,然后在程序的其他地方就可以通过调用自定义类中的静态方法来获取被初始化的Context对象并使用了。下面就来看看简单小例子吧。

2,示例代码

MainActivity.java代码:

package com.hfut.operationcontext;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void testContext(View view){
        Tool.toast();
        Intent intent=new Intent(MyApplication.getContext(),SecondActivity.class);
        startActivity(intent);
    }
}

MyApplication.java代码:

package com.hfut.operationcontext;

import android.app.Application;
import android.content.Context;

/**
 * author:why
 * created on: 2018/4/5 21:12
 * description:
 */
public class MyApplication extends Application {
    public static  Context context;
    @Override
    public void onCreate() {
        context=getApplicationContext();
        super.onCreate();
    }
    public static Context getContext(){
        return context;
    }
}

SecondActivity.java代码:

package com.hfut.operationcontext;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }
}

Tool.java代码:

package com.hfut.operationcontext;

import android.widget.Toast;

/**
 * author:why
 * created on: 2018/4/5 21:46
 * description:
 */
public class Tool {
    public static void toast(){
        Toast.makeText(MyApplication.getContext(),"Context测试",Toast.LENGTH_SHORT).show();
    }
}

activity_main.xml代码:




activity_second.xml代码:




主配置文件AndroidManifest.xml代码:




    
        
            
                

                
            
        
        
    

3,运行结果

      因为逻辑很简单,我这里简单说一下,平时我们Toast弹出内容的时候,一般都需要一个Context对象,在活动中或者是广播接受者等四大组件中,是很好获取的;但是有时候在自定义类中就需要使用Context对象就可以使用这种方法来解决,比如我在例子中的Tool工具类就是这样实现的,当然你也可以把其当做一个参数让调用者来解决。

注:欢迎扫码关注

 

你可能感兴趣的:(Android基础,随笔,第一行代码)