我有一个课程,我从10多个活动中获取上下文对象.
我想知道当前哪个活动的上下文对象.
我尝试了以下但没有结果.
context.equals(One.this);
context.equeals(One.class);
Run Code Online (Sandbox Code Playgroud)
如有任何想法请与我分享!
我正在尝试处理我的应用程序中的异常.我正在尝试记录异常,然后使用Toast提醒用户存在问题.我在我的所有类中都有这个工作查找扩展Activity.
但是,在任何没有扩展活动的类中,我都无法使用toast方法,因为我无法获取当前上下文.有没有一种简单的方法来解决这个问题,还是我的班级应该扩展活动?
我有一个扩展Spinner的自定义View类.当用户做出选择时,我正在试图找出与嵌入的Activity对话的正确方法.我看到OnItemSelected监听器获得了对Adapter的引用,但是我不清楚我是否应该使用这个适配器并以某种方式走向它的父链,或者我是否应该直接与上下文对话(由于某种原因)即使我无法想到一种可能会失败的方式,也不会感到安全.
在应用程序的某个地方,我需要使用getString方法获取本地化字符串以获取错误消息.为此,我需要一个Context实例,例如来自一个Activity.这真的是这个设计的吗?我真的被迫将这些对象传递给类和方法,或者我错过了这一点,还有其他方法来获取字符串引用吗?
为了澄清,在一个Activity中,我有一个内部AsyncTask子类,在doInBackground中实例化一个新类,用于UI线程之外的一些短网络处理.我希望错误消息被本地化,为此我需要将Context实例(换句话说,Activity)传递到该类中.从XML文件中获取价值资源的设计似乎有点不直观.它让我想知道为什么它与Context实例结合在一起而不是静态的东西或者 - 请原谅我 - 一个单例,因为Context暗示是全局应用程序上下文而不仅仅是一个Activity的一部分.
我有一个名为BinderData扩展的类BaseAdapter.我想获得基类上下文.我尝试使用,getContext()但在以下情况下不起作用BaseAdapter.
我怎样才能获得这堂课的背景?
我正在编写一个Android应用程序,它具有封装在内部库中的一些功能.但是,要使此功能起作用,库需要应用程序上下文的实例.给这个上下文库提供库的最佳方法是什么?我看到一些选项,其中没有一个吸引人:
Application并调用getApplicationContext()
Context每次获得对单例的引用时都会传递.
在Android实用程序类中,我想在类中获取系统首选项值,但我没有那里的上下文,因为调用它的类也没有上下文.我发现对于Resources,可以使用静态Resources.getSystem()函数.在没有上下文的情况下获取系统偏好是否有类似的方法
我的班级不是活动也不是服务.这是一个实用工具类.如果需要可以提供更多信息.
我正在编写一些测试来测试我的sqllite数据库代码.有人可以在这里解释使用我从中获取AndroidTestCase.getContext()或使用的上下文编写这些测试是否会有所不同IsolatedContext.
我正在编写一个库类来封装我的第一个Android应用程序中的一些逻辑.我要封装的功能之一是查询地址簿的函数.因此,它需要一个ContentResolver.我试图弄清楚如何保持库函数的黑盒子...也就是说,避免让每个Activity传递都在自己的上下文中得到一个ContentResolver.
问题是我不能为我的生活弄清楚如何ContentResolver从我的库函数中获取一个.我找不到包含的导入getContentResolver.谷歌说用来getContext得到一个Context可以打电话getContentResolver,但我找不到包含getContext任何一个的导入.下一篇文章说用于getSystemService获取一个对象来调用getContext.但是 - 我找不到包含任何内容的导入getSystemService!
所以我很困惑,我怎么能在封装的库函数中获得ContentResolver,或者我几乎在每个调用Activity传递引用它自己的上下文?
我的代码基本上是这样的:
public final class MyLibrary {
private MyLibrary() { }
// take MyGroupItem as a class representing a projection
// containing information from the address book groups
public static ArrayList<MyGroupItem> getGroups() {
// do work here that would access the contacts
// thus requiring the ContentResolver
}
}
Run Code Online (Sandbox Code Playgroud)
getGroups是我希望避免传递的方法, …
所以,我完成了一个项目,现在我面临的主要问题是应用程序中的内存泄漏("泄漏"意味着您保留对某个活动的引用,从而阻止GC收集它)
我发现的一些发生内存泄漏的案例是:
这是因为对活动上下文的长期引用.
我在这里找到的一个很好的例子,
private static Drawable sBackground;
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(this);
label.setText("Leaks are bad");
if (sBackground == null) {
sBackground = getDrawable(R.drawable.large_bitmap);
}
label.setBackgroundDrawable(sBackground);
setContentView(label);
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是private static Drawable sBackground;静态Drawable是以Activity作为上下文创建的,所以在这种情况下,有一个引用Activity的Drawable的静态引用,这就是泄漏的原因.只要该引用存在,Activity就会保留在内存中,泄露其所有视图.
引起注意的第二种情况是屏幕方向改变时.当屏幕方向改变时,系统默认会破坏当前活动并创建新活动,同时保留其状态.这样,Android将从资源重新加载应用程序的UI.现在假设您编写了一个带有大位图的应用程序,您不希望在每次轮换时加载该位图.
这将导致大量内存泄漏,因为可能需要加载大的位图.
第三种情况,我发现是对活动上下文的引用.它还会导致内存泄漏.
我想知道是否有任何简单的方法可以避免这种内存泄漏的发生.或者是否有工具可以检查并从应用程序中删除这些内存泄漏.
android ×10
android-context ×10
adapter ×1
architecture ×1
baseadapter ×1
java ×1
memory-leaks ×1
singleton ×1
spinner ×1
testing ×1
view ×1