我知道android中存在许多上下文
所以当我创建new TextView
时,我必须像这样在构造函数中传递context
TextView textView = new TextView(this);
我知道它是必需的但是为什么不仅仅是为了我而创建和Android处理上下文?
答案 0 :(得分:2)
我喜欢在视觉上考虑context
因为我是Fragments
的狂热用户所以我大部分时间都会传递context
或继承context
例如,它通常来自Activity
。
有关应用程序环境的全局信息的接口。这是一个抽象类,其实现由Android系统提供。它允许访问特定于应用程序的资源和类,以及对应用程序级操作的上调,例如启动活动,广播和接收意图等。
如Android Developers所述。它基本上为您提供了帮助,确保您可以执行“应用程序级操作的上调”,所以让我们详细说明您的情况。
我知道它是必需的但是为什么不只是被创建和android处理 我的背景?
在没有TextView
实例的情况下创建Context
的新实例。所以它看起来像TextView tv = new TextView();
会让Android混淆TextView
生成的位置。他们如何知道这是应用程序级别还是活动级别?在创建实例之前TextView
需要什么特性?当你转到TextView
的构造函数时,你会注意到它在生成所述TextView
的新实例之前需要一些重要的信息。例如:final Resources.Theme theme = context.getTheme();
只是一行,他们通过Context
实例收集信息,现在他们知道信息的来源,然后他们可以应用相应的主题。
除非您告诉他们,否则Android将如何知道您从哪个类调用该类以及您希望应用哪个主题?
最后回答你的问题,“为什么不只是为我创建android处理上下文?”这个 IS android为你处理的事情,但它需要知道你来自哪里以及你所处的生命周期。
从评论中添加了修改。
为什么不在应用程序上下文中初始化该主题并在textview的代码中使用而不受干扰
因为它再次归结为您希望该小部件所基于的位置。因此,我想在我的TextView
内部activity
,但我们正在调用应用程序级上下文,将自动应用的主题为@style/apptheme
。但是,如果我希望TextView
遵循当前activity
的相同样式指南,而不是手动更改我想要创建的每个小部件的主题(我是开发人员),android会为您处理它,无论如何你在应用程序中的位置它使样式更简单,创建TextView
简单等的新实例
你知道我记得.NET平台上的一个场景,当我在表单上创建新按钮而没有任何东西传递给构造函数时,它会自动为父窗体继承它的主题。你认为.NET设计在这方面更好或者什么?
不幸的是,我没有经验可以说.NET,但我认为在使用可随时关闭和打开的应用程序期间不断变化的活动,服务和接收器状态。这是一个很好的功能,可以确保Android知道你在哪里,以及你正在创建什么。
答案 1 :(得分:1)
我认为这都与Context
的生命周期有关。例如,可以终止Activity
并收集垃圾,这将使其Context
为空。这也可以反过来。在某些情况下,引用Activity
的上下文可能会导致内存泄漏,Activity
永远不会被垃圾回收。
同时查看this answer
答案 2 :(得分:0)
Context是内存管理的方式。它可能是Android应用程序中最常用的元素......它也可能是最被误用的。
您可以安全地使用给定的Context对象执行的常见操作取决于它最初的来源。
下面是一个应用程序将接收Context的常见位置表,以及所提到的每个案例的用法: 阅读本文我希望对您有所帮助 https://possiblemobile.com/2013/06/context/