Context是什么?
1) Context是一個抽象類,其通用實現在ContextImpl類中。
2) Context:是一個訪問application環境全局信息的接口,通過它可以訪問application的資源和相關的類,其主要功能如下:
啟動Activity
啟動和停止Service
發送廣播消息(Intent)
注冊廣播消息(Intent)接收者
可以訪問APK中各種資源(如Resources和AssetManager等)
可以訪問Package的相關信息
APK的各種權限管理
從以上分析可以看出,Context就是一個對APK包無所不知的大管家,大家需要什么,直接問它就可以了。(這篇文章是我在csdn中的謀篇文章看到的,總結的不錯)
在上面我們看到了conntent的功能和作用下面就是我自己的一些理解
context 在很多地方都會用到,入Dialog、RecyclerView的onCreateView方法中的 View view = Layout.from(parent.getcontent()).inflate.(R.layout.Recycle,parent,flase)
和Intent intent = new Intent(context,NewsContentActivity.class)等這些方法都會用到content,
1) 創建Application 對象時, 而且整個App共一個Application對象
2) 創建Service對象時
3) 創建Activity對象時
因此應用程序App共有的Context數目公式為:
總Context實例個數 = Service個數 + Activity個數 + 1(Application對應的Context實例)
和Intent intent = new Intent(context,NewsContentActivity.class)等這些方法都會用到content,
1) 創建Application 對象時, 而且整個App共一個Application對象
2) 創建Service對象時
3) 創建Activity對象時
因此應用程序App共有的Context數目公式為:
總Context實例個數 = Service個數 + Activity個數 + 1(Application對應的Context實例)
那么我對contenx的理解是,用到context的地方都是要加載頁面、xml這類,而這些頁面都是Activity,要放到View中去的,
而View的加載的底層本質都是LayoutInflater.from(this).inflate(resId,null)用的是這個方法,
而Context是抽象類,Activity和Application為Context的間接子類,所以我就感覺其實context可以理解為想加載想要的頁面所需要的
一個框架,我們需要的是把想要出現的東西放到這個Context中(即是View),不同的View有不同的context,就像Intent的作用,可以
從這個View1調轉到另一個View2中,而View2是從View1跳轉而來的,那一般我們是 Intent intent = new Intent(this(這里也可為context),View2.class),context.startActivity(intent);
這里的this為這個類繼承了Application或Activity,所以都有繼承context,
那什么時候要用到context呢?
那通過這個例子我們可以這么理解context,一般要用到頁面出現新的View的時候(如Dialog、新的Activity等)我們都要用到context
那這個context用哪個好呢,一般都為想要在哪個View中彈出或跳轉的那一個View的context(即彈窗前的一個界面Activity的context)
因為View都是Activity,context是調用LayoutInflater.from(this).inflate(resId,null)的關鍵,是java代碼到.xml頁面布局的橋梁實現,其實
也可以通過
Context context = MainActivity.this;
因為MainActivity繼承Activity,而Activity繼承Context,所以它也可以用來提供Activity Contex;
而View的加載的底層本質都是LayoutInflater.from(this).inflate(resId,null)用的是這個方法,
而Context是抽象類,Activity和Application為Context的間接子類,所以我就感覺其實context可以理解為想加載想要的頁面所需要的
一個框架,我們需要的是把想要出現的東西放到這個Context中(即是View),不同的View有不同的context,就像Intent的作用,可以
從這個View1調轉到另一個View2中,而View2是從View1跳轉而來的,那一般我們是 Intent intent = new Intent(this(這里也可為context),View2.class),context.startActivity(intent);
這里的this為這個類繼承了Application或Activity,所以都有繼承context,
那什么時候要用到context呢?
那通過這個例子我們可以這么理解context,一般要用到頁面出現新的View的時候(如Dialog、新的Activity等)我們都要用到context
那這個context用哪個好呢,一般都為想要在哪個View中彈出或跳轉的那一個View的context(即彈窗前的一個界面Activity的context)
因為View都是Activity,context是調用LayoutInflater.from(this).inflate(resId,null)的關鍵,是java代碼到.xml頁面布局的橋梁實現,其實
也可以通過
Context context = MainActivity.this;
因為MainActivity繼承Activity,而Activity繼承Context,所以它也可以用來提供Activity Contex;
或
單獨新建一類,獲取當前活動的context對象
public class MyApplication extends Application {
private static Context context;
單獨新建一類,獲取當前活動的context對象
public class MyApplication extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
public void onCreate() {
super.onCreate();
context = getApplicationContext();
//獲取應用上下文環境
public static Context getContext() {
return context;
}
}
public static Context getContext() {
return context;
}
}
另外要在AndroidManifest.xml中聲明Application的名字
<application
android:name=".MyApplication"
<application
android:name=".MyApplication"
使用時context對象,調用就可
MyApplication.getContext();
MyApplication.getContext();