草庐IT

android - 仍然对上下文感到困惑

coder 2023-12-16 原文

我是安卓新手...

我不得不面对 context 类的最长时间,这有时让我感到困惑。 在某些地方它使用context, 它在某处被 getApplicationContext()getContext()getBaseContext() 调用。

我试图让我从这个网站上了解它, http://www.developer.android.com/ , 但很难理解。

最佳答案

在 Android 上,上下文用于许多操作,但主要用于加载和访问资源。这就是为什么所有小部件都在其构造函数中接收 Context 参数的原因。在常规的 Android 应用程序中,通常有两种 Context,Activity 和 Application。它通常是开发人员传递给需要上下文的类和方法的第一个:

您可以通过调用 getApplicationContext()、getContext()、getBaseContext() 或这个(在 Activity 类中时)来获取上下文。

上下文的典型用途:

  1. 创建新对象:创建新 View 、适配器、监听器:

    TextView tv = new TextView(getContext()); ListAdapter 适配器 = new SimpleCursorAdapter(getApplicationContext(), ...);

  2. 访问标准公共(public)资源:服务如 LAYOUT_INFLATER_SERVICE,SharedPreferences:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext().getSharedPreferences(名称, 模式);

  3. 隐式访问组件:关于内容提供者, 广播、 Intent

    getApplicationContext().getContentResolver().query(uri, ...);

使用上下文时必须小心,因为维护它会导致内存泄漏

总而言之,为避免上下文相关的内存泄漏,请记住以下几点:

  1. 不要保留对上下文 Activity 的长期引用(引用 一个 Activity 应该和 Activity 有相同的生命周期 本身)
  2. 尝试使用 context-application 而不是 context-activity
  3. 如果您不控制,请避免在 Activity 中使用非静态内部类 他们的生命周期,使用静态内部类并进行弱引用 到里面的 Activity 。这个问题的解决方案是使用 带有对外部类的 WeakReference 的静态内部类,如上所示 例如在 ViewRoot 及其 W 内部类中
  4. 垃圾收集器不是防止内存泄漏的保险

关于android - 仍然对上下文感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10497244/

有关android - 仍然对上下文感到困惑的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby - 在 Ruby 中,在类方法的上下文中,什么是实例变量和类变量? - 2

    如果我有以下一段Ruby代码:classBlahdefself.bleh@blih="Hello"@@bloh="World"endend@blih和@@bloh到底是什么?@blih是Blah类中的一个实例变量,@@bloh是Blah类中的一个类变量,对吗?这是否意味着@@bloh是Blah的类Class中的一个变量? 最佳答案 人们似乎忽略了该方法是类方法。@blih将是常量Bleh的类Class实例的实例变量。因此:irb(main):001:0>classBlehirb(main):002:1>defself.blehirb

  3. ruby - 在 Ruby 中的另一个上下文中评估潜在的相对 URI - 2

    我在Ruby程序中有两个URI。一个肯定是绝对URI,另一个可能是绝对URI或相对URI。我想在第一个的上下文中将第二个转换为绝对URI,所以如果第一个是http://pupeno.com/blog第二个是/about,结果应该是http://pupeno.com/about.有什么想法吗? 最佳答案 Ruby的内置URI和Addressablegem,做这个简短的工作。我更喜欢Addressable,因为它功能更全面,但URI是内置的。require'uri'URI.join('http://pupeno.com/blog','/

  4. Ruby 将上下文分配给 lambda? - 2

    是否可以不为lambda分配上下文?例如:classRuledefget_rulereturnlambda{putsname}endendclassPersonattr_accessor:namedefinit_rule@name="ruby"Rule.new.get_rule.call()#shouldsay"ruby"butsaywhatobjectofclassRull,doesnothavevariablename#orself.instance_eval&Rule.new.get_ruleendend我的目标是->没有上下文的存储过程对象,并在特定位置调用之前分配上下文。可能

  5. ruby - 对回文产品问题感到困惑 - 2

    我一直在学习Ruby,所以我想我应该尝试一下项目中的一些Euler难题。尴尬的是,我只完成了问题4...问题4如下:Apalindromicnumberreadsthesamebothways.Thelargestpalindromemadefromtheproductoftwo2-digitnumbersis9009=91×99.Findthelargestpalindromemadefromtheproductoftwo3-digitnumbers.所以我想我会在嵌套的for循环中从999循环到100并测试回文,然后在找到第一个(应该是最大的)时跳出循环:final=nilrang

  6. ruby - 从上面的上下文返回 - 2

    这个问题的表述并不复杂,但我会尽力而为。通过我们的代码,我们有一些片段,例如response=do_something()returnresponseunlessresponse.ok?我想写一个包装器方法,这样就不需要这一步了,它看起来像这样defrr(&block)response=yieldunlessresponse.ok?#somehowdoreturnbutincontextabove(magicneededhere)endresponseend之后我就可以将上面的代码最小化为response=rr{do_something()}似乎不可能,但这是Ruby所以也许有办法吗?

  7. ruby - 调用 instance_eval(&lambda) 传递当前上下文时出现错误 'wrong number of arguments' - 2

    要清楚-此代码运行完美-codewithproc但如果我将Proc.new更改为lambda,则会出现错误ArgumentError:wrongnumberofarguments(1for0)这可能是因为instance_eval想要将self作为参数传递,而lambda将其视为一种方法并且不接受未知参数?有两个例子-第一个是工作:classRuledefget_ruleProc.new{putsname}endendclassPersonattr_accessor:namedefinit_rule@name="ruby"instance_eval(&Rule.new.get_rule

  8. ruby-on-rails - 仍然建议使用 Minitest 在 Rails 4 中测试路由吗? - 2

    在Rails3中,当在MiniTest中编写功能测试时,我养成了将路由测试与Controller操作分开测试的习惯。我从RailsGuideonTesting-Section9:TestingRoutes得到了这个想法.然而,在将我的应用程序升级到Rails4之后,我注意到如果我不为get|patch|post|delete方法提供一组适当的参数。例如,给定路线:#config/routes.rbnamespace"api"donamespace"v2",defaults:{format::json}doresources:usersdoresources:postsdoresourc

  9. ruby-on-rails - Ruby on Rails : Acts as taggable on gem, 在模型中使用上下文 - 2

    我想知道是否有人可以帮助我理解文档中的这一部分:Withthedefinedcontextinmodel,youhavemultiplenewmethodsatdisposaltomanageandviewthetagsinthecontext.Forexample,with:skillcontextthesemethodsareaddedtothemodel:skill_list(andskill_list.add,skill_list.removeskill_list=),skills(plural),skill_counts.我有这个:型号:classProjectControl

  10. Ruby enum_for 困惑 - 2

    我正在尝试查找名为Command的特定类型的所有子类在Ruby中,我遇到了以下代码,它完美地完成了这个技巧,但是我真的不明白它是如何工作的,主要是class部分。我已经尝试阅读此内容,但我觉得我仍然缺少一些Ruby魔法。有人可以向我解释一下吗:-)ObjectSpace.enum_for(:each_object,class 最佳答案 class返回Command的单例类.这是Command的唯一(直接)实例的类。在ruby​​中,C的子类的单例类是C的单例类的子类。所以Command的所有子类都有继承自Command的单例类的单例

随机推荐