Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取Context的各种方法?

获取Context的各种方法?

提问于 2017-12-22 06:10:22
回答 2关注 0查看 976

在我看到的各种Android代码中:

代码语言:txt
AI代码解释
复制
 public class MyActivity extends Activity {
代码语言:txt
AI代码解释
复制
    public void method() {
代码语言:txt
AI代码解释
复制
       mContext = this;    // since Activity extends Context
代码语言:txt
AI代码解释
复制
       mContext = getApplicationContext();
代码语言:txt
AI代码解释
复制
       mContext = getBaseContext();
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
 }

但是我找不到任何合适的解释,哪一个更好,什么情况下应该使用。

指出这方面的文件,以及有关如果选择了错误选项可能会破坏的指导,将不胜感激。

回答 2

秋之夕颜清

发布于 2017-12-22 06:33:31

在某些情况下,当在线程中运行某些东西时,您可以使用Activity上下文而非应用程序上下 当线程完成执行,你需要将结果返回给调用者的活动,你需要一个处理程序的上下文。

代码语言:txt
AI代码解释
复制
((YourActivity) context).yourCallbackMethod(yourResultFromThread, ...);

嗨喽你好

发布于 2017-12-22 06:33:13

下是我发现的有关使用context:

1)。在一个Activity本身内部,this用于扩展布局和菜单,注册上下文菜单,实例化小部件,启动其他活动,Intent在Activity实例化的首选项中创建新的或其他可用的方法Activity。

充气布局:

代码语言:txt
AI代码解释
复制
View mView = this.getLayoutInflater().inflate(R.layout.myLayout, myViewGroup);

膨胀菜单:

代码语言:txt
AI代码解释
复制
@Override
代码语言:txt
AI代码解释
复制
public boolean onCreateOptionsMenu(Menu menu) {
代码语言:txt
AI代码解释
复制
    super.onCreateOptionsMenu(menu);
代码语言:txt
AI代码解释
复制
    this.getMenuInflater().inflate(R.menu.mymenu, menu);
代码语言:txt
AI代码解释
复制
    return true;
代码语言:txt
AI代码解释
复制
}

注册上下文菜单:

this.registerForContextMenu(myView);

实例化小部件:

代码语言:txt
AI代码解释
复制
TextView myTextView = (TextView) this.findViewById(R.id.myTextView);

开始Activity:

代码语言:txt
AI代码解释
复制
Intent mIntent = new Intent(this, MyActivity.class);
代码语言:txt
AI代码解释
复制
this.startActivity(mIntent);

实例化首选项:

代码语言:txt
AI代码解释
复制
SharedPreferences mSharedPreferences = this.getPreferenceManager().getSharedPreferences();

2)。对于应用程序范围的类,使用getApplicationContext()这个上下文来存在应用程序的生命周期。

检索当前Android包的名称:

代码语言:txt
AI代码解释
复制
public class MyApplication extends Application {    
代码语言:txt
AI代码解释
复制
    public static String getPackageName() {
代码语言:txt
AI代码解释
复制
        String packageName = null;
代码语言:txt
AI代码解释
复制
        try {
代码语言:txt
AI代码解释
复制
            PackageInfo mPackageInfo = getApplicationContext().getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), 0);
代码语言:txt
AI代码解释
复制
            packageName = mPackageInfo.packageName;
代码语言:txt
AI代码解释
复制
        } catch (NameNotFoundException e) {
代码语言:txt
AI代码解释
复制
            // Log error here.
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
        return packageName;
代码语言:txt
AI代码解释
复制
    }

}

绑定一个应用程序范围的类:

代码语言:txt
AI代码解释
复制
Intent mIntent = new Intent(this, MyPersistent.class);
代码语言:txt
AI代码解释
复制
MyServiceConnection mServiceConnection = new MyServiceConnection();
代码语言:txt
AI代码解释
复制
if (mServiceConnection != null) {
代码语言:txt
AI代码解释
复制
    getApplicationContext().bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
代码语言:txt
AI代码解释
复制
}

3)。对于监听器和其他类型的Android类(例如ContentObserver),使用Context替换如:

代码语言:txt
AI代码解释
复制
mContext = this;    // Example 1
代码语言:txt
AI代码解释
复制
mContext = context; // Example 2

在哪里this或是context什么类的上下文(活动等)。

Activity 上下文替换:

代码语言:txt
AI代码解释
复制
public class MyActivity extends Activity {
代码语言:txt
AI代码解释
复制
    private Context mContext;
代码语言:txt
AI代码解释
复制
    @Override
代码语言:txt
AI代码解释
复制
    protected void onCreate(Bundle savedInstanceState) {
代码语言:txt
AI代码解释
复制
        super.onCreate(savedInstanceState);        
代码语言:txt
AI代码解释
复制
        mContext = this;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

监听器上下文替换:

代码语言:txt
AI代码解释
复制
public class MyLocationListener implements LocationListener {
代码语言:txt
AI代码解释
复制
    private Context mContext;
代码语言:txt
AI代码解释
复制
    public MyLocationListener(Context context) {
代码语言:txt
AI代码解释
复制
        mContext = context;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

ContentObserver 上下文替换:

代码语言:txt
AI代码解释
复制
public class MyContentObserver extends ContentObserver {
代码语言:txt
AI代码解释
复制
    private Context mContext;
代码语言:txt
AI代码解释
复制
    public MyContentObserver(Handler handler, Context context) {
代码语言:txt
AI代码解释
复制
        super(handler);
代码语言:txt
AI代码解释
复制
        mContext = context;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

4)。对于BroadcastReceiver(包括内联/嵌入式接收器),使用接收器自己的上下文。

外部BroadcastReceiver:

代码语言:txt
AI代码解释
复制
public class MyBroadcastReceiver extends BroadcastReceiver {
代码语言:txt
AI代码解释
复制
    @Override
代码语言:txt
AI代码解释
复制
    public void onReceive(Context context, Intent intent) {
代码语言:txt
AI代码解释
复制
        final String action = intent.getAction();
代码语言:txt
AI代码解释
复制
        if (action.equals(Intent.ACTION_SCREEN_OFF)) {
代码语言:txt
AI代码解释
复制
            sendReceiverAction(context, true);
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
        private static void sendReceiverAction(Context context, boolean state) {
代码语言:txt
AI代码解释
复制
            Intent mIntent = new Intent(context.getClass().getName() + "." + context.getString(R.string.receiver_action));
代码语言:txt
AI代码解释
复制
            mIntent.putExtra("extra", state);
代码语言:txt
AI代码解释
复制
            context.sendBroadcast(mIntent, null);
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

内嵌/嵌入BroadcastReceiver:

代码语言:txt
AI代码解释
复制
public class MyActivity extends Activity {
代码语言:txt
AI代码解释
复制
    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
代码语言:txt
AI代码解释
复制
        @Override
代码语言:txt
AI代码解释
复制
        public void onReceive(Context context, Intent intent) {
代码语言:txt
AI代码解释
复制
            final boolean connected = intent.getBooleanExtra(context.getString(R.string.connected), false);
代码语言:txt
AI代码解释
复制
            if (connected) {
代码语言:txt
AI代码解释
复制
                // Do something.
代码语言:txt
AI代码解释
复制
            }
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
    };
代码语言:txt
AI代码解释
复制
}

5)。对于服务,使用服务自己的上下文。

代码语言:txt
AI代码解释
复制
public class MyService extends Service {
代码语言:txt
AI代码解释
复制
    private BroadcastReceiver mBroadcastReceiver;
代码语言:txt
AI代码解释
复制
    @Override
代码语言:txt
AI代码解释
复制
    public void onCreate() {
代码语言:txt
AI代码解释
复制
        super.onCreate();
代码语言:txt
AI代码解释
复制
        registerReceiver();
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
    private void registerReceiver() {
代码语言:txt
AI代码解释
复制
        IntentFilter mIntentFilter = new IntentFilter();
代码语言:txt
AI代码解释
复制
        mIntentFilter.addAction(Intent.ACTION_SCREEN_OFF);
代码语言:txt
AI代码解释
复制
        this.mBroadcastReceiver = new MyBroadcastReceiver();
代码语言:txt
AI代码解释
复制
        this.registerReceiver(this.mBroadcastReceiver, mIntentFilter);
代码语言:txt
AI代码解释
复制
    } 
代码语言:txt
AI代码解释
复制
}

6)。对于Toast,通常使用getApplicationContext(),但是在可能的情况下,使用从Activity,Service等传递的上下文。

使用应用程序的上下文:

代码语言:txt
AI代码解释
复制
Toast mToast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG);
代码语言:txt
AI代码解释
复制
mToast.show();

使用从源传递的上下文:

代码语言:txt
AI代码解释
复制
public static void showLongToast(Context context, String message) {
代码语言:txt
AI代码解释
复制
    if (context != null && message != null) {
代码语言:txt
AI代码解释
复制
        Toast mToast = Toast.makeText(context, message, Toast.LENGTH_LONG);
代码语言:txt
AI代码解释
复制
        mToast.show();
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

最后,不要使用getBaseContext()Android框架开发人员的建议。

和开发者交流更多问题细节吧,去 写回答
相关文章
SpringMVC Context 获取
把 CurrentUserMethodArgumentResolver 添加到 SpringMVC 中。
ruochen
2021/12/06
7830
全局获取Context的技巧
在android开发中,非常多地方都要用到Context上下文这个类对象,比方:弹出 Toast
全栈程序员站长
2022/07/08
5600
深入理解 Android 中的各种 Context
老实说,我不明白这个等式有什么意义,而且还是错的。首先多进程情况下,Application 对象就不止一个;其次,Activity、Service、Application 继承自 ContextWrapper,它们自己就是一个 Context,里面又有一个 Base Context;最后,还有各种 outer context、display context 什么的,这部分没深入研究过,但 Context 的数量绝对大于上述等式的两倍了。
233333
2020/02/25
9670
深入理解 Android 中的各种 Context
各种获取设备唯一标识的方法介绍
//现在苹果对隐私方面很严 很难获取一种较好的设备唯一标识符方法,下面几篇博文仅做参考:
全栈程序员站长
2022/09/14
3.6K0
各种获取设备唯一标识的方法介绍
VC中获取窗体句柄的各种方法
AfxGetMainWnd AfxGetMainWnd获取自身窗体句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd;
全栈程序员站长
2022/07/13
1.3K0
IOS中获取各种文件的目录路径的方法
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么.
用户7705674
2021/10/29
6.2K0
Android Context完全解析,你所不知道的Context的各种细节
前几篇文章,我也是费劲心思写了一个ListView系列的三部曲,虽然在内容上可以说是绝对的精华,但是很多朋友都表示看不懂。好吧,这个系列不仅是把大家给难倒了,也确实是把我给难倒了,之前为了写瀑布流ListView的Demo就写了大半个月的时间。那么本篇文章我们就讲点轻松的东西,不去分析那么复杂的源码了,而是来谈一谈大家都熟知的Context。
233333
2020/03/13
9151
Android Context完全解析,你所不知道的Context的各种细节
Android Context完全解析,你所不知道的Context的各种细节
用户1158055
2018/01/08
1.7K0
Android Context完全解析,你所不知道的Context的各种细节
jsp Request获取url信息的各种方法比较
Java代码   从Request对象中可以获取各种路径信息,以下例子:   假设请求的页面是index.jsp,项目是WebDemo,则在index.jsp中获取有关request对象的各种
allsmallpig
2021/02/25
1.6K0
全局Context无侵入式获取
当我们在使用第三方库,或者自己封装库,如果需要需要用到Context时,一般做法就是将初始化方法暴露给调用方,让调用方在初始化类库时,传入Context。
老马的编程之旅
2022/06/22
5690
前端开发:JS获取当前日期方法(各种获取时间的奇葩需求汇集)
在前端开发过程中,有时候会需要获取当前时间和已知时间做对比的需求,也有单纯的获取当前时间然后传给后台,还有各种需要把获取到的当前时间转化成特定的时间格式传给后台,这虽然不是一个复杂的操作,但是不同的产品需求不一样,有时候还需要转时区。总之,就是各种稀奇古怪的需求,那么本篇博文就来分享一下关于在前端开发过程中获取当前时间或者日期相关的各种操作。
三掌柜
2022/04/12
8K0
前端开发:JS获取当前日期方法(各种获取时间的奇葩需求汇集)
spring security reactive获取security context
本文主要研究下reactive模式下的spring security context的获取。
code4it
2018/09/17
3.5K0
js 获取屏幕各种宽高的方法(浏览器兼容)
屏幕的有效宽高: window.screen.availHeight window.screen.availWidth 网页可见区域宽:document.body.clientWidth  网页可见区域高:document.body.clientHeight  网页可见区域宽:document.body.offsetWidth (包括边线的宽)  网页可见区域高:document.body.offsetHeight (包括边线的宽)  网页正文全文宽:document.body.scrollWidth  网
Sindsun
2018/04/28
3.7K0
Stage模型和FA模型获取Context的方式
Context模块提供了ability或application的上下文的能力,包括允许访问特定于应用程序的资源、请求和验证权限等。获取context方式如下代码所示:
徐建国
2023/02/23
1K0
Stage模型和FA模型获取Context的方式
java获取当前日期和时间(各种方法对比)
System.currentTimeMillis()产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数,类型为long; Date:
ha_lydms
2023/08/09
3.1K0
java获取当前日期和时间(各种方法对比)
如何从context-param获取参数?
马克-to-win:用context-param存放的参数,本个web应用中的任何servlet,jsp都可以获得。
马克java社区
2021/07/07
3.2K0
js获取各种高度总结
在写js的时候偶尔需要获取各种高度,比如;浏览器高度,页面高度,滚动高度等。抽空整理了我自己常用到的,时间仓促,没有考虑到万恶的IE浏览器。。。。 获取屏幕的高度和宽度(屏幕分辨率): window.screen.height window.screen.width 获取屏幕工作区域的高度和宽度(去掉状态栏): window.screen.availHeight window.screen.availWidth 网页全文的高度和宽度: document.body.scrollHeight document
友儿
2022/07/27
13K0
点击加载更多

相似问题

请问如何获取各种沙龙活动的回放视频?是否每个沙龙都有回放?

1174

Context Capture云服务器集群?

0480

小程序获取方法?

3383

Error starting Tomcat context和Application运行失败?

028

如何获取JavaBean的方法有那些?

2379
相关问答用户
平安资管 | 架构师擅长4个领域
擅长3个领域
腾讯云TDP | 高级后端开发工程师擅长3个领域
擅长4个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档