小编Mat*_*ias的帖子

getApplication()与getApplicationContext()

我找不到令人满意的答案,所以我们在这里:有什么处理Activity/Service.getApplication()Context.getApplicationContext()

在我们的应用程序中,都返回相同的对象.ActivityTestCase然而,在一个getApplication()模拟应用程序将使用模拟getApplicationContext返回,但仍将返回一个不同的上下文实例(一个由Android注入).那是一个错误吗?这是故意的吗?

我甚至不了解首先的区别.测试套件外是否存在两个呼叫可能带有不同对象的情况?何时以及为何?此外,为什么getApplication定义上ActivityService,但不是Context?不应该随处可用的有效应用程序实例吗?

android android-service android-context android-activity

407
推荐指数
3
解决办法
30万
查看次数

AsyncTask在概念上是否真的有缺陷,或者我只是缺少某些东西?

我已经调查了这个问题好几个月了,想出了不同的解决方案,我不满意,因为它们都是大规模的黑客攻击.我仍然无法相信一个设计有缺陷的课程已经进入框架而没有人在讨论它,所以我想我一定要错过一些东西.

问题在于AsyncTask.根据它的文件

"允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序."

然后该示例继续示出如何showDialog()调用一些示例性方法onPostExecute().然而,这对我来说似乎完全是设计的,因为显示一个对话框总是需要引用一个有效的Context,而AsyncTask 绝不能保持对上下文对象的强引用.

原因很明显:如果活动被破坏而触发任务怎么办?这可能一直发生,例如因为你翻转了屏幕.如果任务将持有对创建它的上下文的引用,那么您不仅要继续使用无用的上下文对象(窗口将被销毁,并且任何 UI交互都会因异常而失败!),您甚至可能会创建一个内存泄漏.

除非我的逻辑在这里有缺陷,否则转换为:onPostExecute()完全没用,因为如果你没有访问任何上下文,这个方法在UI线程上运行有什么用?你不能在这里做任何有意义的事情.

一种解决方法是不将上下文实例传递给AsyncTask,而是传递给Handler实例.这是有效的:因为Handler松散地绑定了上下文和任务,所以你可以在它们之间交换消息而不会有泄漏的风险(对吧?).但这意味着AsyncTask的前提,即您不需要打扰处理程序,是错误的.它似乎也滥用了Handler,因为你在同一个线程上发送和接收消息(你在UI线程上创建它并在onPostExecute()中通过它发送它也在UI线程上执行).

最重要的是,即使使用了这种解决方法,您仍然会遇到这样的问题:当上下文被破坏时,您没有记录它触发的任务.这意味着您必须在重新创建上下文时重新启动任何任务,例如在屏幕方向更改后.这是缓慢而浪费的.

我对此的解决方案(在Droid-Fu库中实现)是维护WeakReferences从组件名称到其唯一应用程序对象上的当前实例的映射.每当启动AsyncTask时,它都会在该映射中记录调用上下文,并且在每次回调时,它将从该映射中获取当前上下文实例.这可以确保您永远不会引用陈旧的上下文实例,并且您始终可以访问回调中的有效上下文,这样您就可以在那里进行有意义的UI工作.它也不会泄漏,因为引用很弱并且在没有给定组件的实例存在时被清除.

尽管如此,这是一个复杂的解决方法,需要对一些Droid-Fu库类进行子类化,这使得这种方法非常具有侵入性.

现在我只想知道:我是否只是大量遗漏某些东西,或者AsyncTask是否真的完全有缺陷?您的使用经验如何?你是怎么解决这些问题的?

感谢您的输入.

concurrency android handler android-asynctask

260
推荐指数
5
解决办法
3万
查看次数

如何获得一个Dialog样式活动窗口来填充屏幕?

我正在使用对话框主题集的活动,我希望它是全屏的.我尝试了各种各样的东西,甚至通过WindowManager手动将窗口扩展到全宽和高度,但没有任何作用.

显然,对话框窗口(或具有对话框主题的活动)将仅根据其内容进行扩展,但即使这样也不总是有效.例如,我显示了一个进度条圆,其宽度和高度设置为FILL_PARENT(其布局容器也是如此),但是,对话框仍然围绕着更小的进度条而不是填充屏幕.

必须有一种方法可以在对话框窗口中显示一些小的内容,但是在没有内容调整大小的情况下将其扩展到全屏大小?

user-interface android dialog

135
推荐指数
6
解决办法
10万
查看次数

'git pull origin mybranch'离开本地mybranch N承诺原产地.为什么?

我刚看到一些奇怪的事情git pull,我不明白.

星期五,我在一家当地分公司工作.我们称之为mybranch.在离开办公室之前,我把它推到原点(这是我的GitHub库)git push origin mybranch.

昨天在家里,我把pullmybranch写到我的笔记本电脑上,做了一些编码,然后将我的更改推回到github(原点).

现在我再次上班,并试图将改变从昨天拉到我的工作机器上(周末我的工作地点的本地回购没有改变):

git pull origin mybranch
Run Code Online (Sandbox Code Playgroud)

这导致了快速合并,这很好.然后我做了一个git status,它说:

# On branch mybranch
# Your branch is ahead of 'origin/mybranch' by 6 commits.
#
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

咦?如果我周末没有触摸它,只是从原点拉出来,它怎么能提前6次?所以我跑了一个git diff origin/mybranch,差异就是我刚刚从远程拉出来的6个变化.

我只能通过运行来"修复"这个git fetch origin:

From git@github.com:me/project
af8be00..88b0738  mybranch -> origin/mybranch
Run Code Online (Sandbox Code Playgroud)

显然,我的本地仓库缺少一些参考对象,但这怎么可能呢?我的意思是,一个pull已经进行了一次获取,除了那个分支之外我没有处理任何事情,所以a git fetch origingit fetch origin mybranch应该有相同的结果吗?

我应该总是用git pull origin而不是git pull origin branchname …

git version-control git-pull

91
推荐指数
1
解决办法
3万
查看次数

有没有办法让ellipsize ="marquee"总是滚动?

我想在TextView上使用选取框效果,但只有在TextView获得焦点时才会滚动文本.这是一个问题,因为在我的情况下,它不能.

我在用:

  android:ellipsize="marquee"
  android:marqueeRepeatLimit="marquee_forever"
Run Code Online (Sandbox Code Playgroud)

有没有办法让TextView始终滚动其文本?我已经看到这是在Android Market应用程序中完成的,其中应用程序名称将在标题栏中滚动,即使它没有获得焦点,但我无法在API文档中找到这一点.

android marquee textview

90
推荐指数
6
解决办法
6万
查看次数

ViewPager不重绘内容,保持/变为空白

我们在这里遇到了一个非常奇怪的ViewPager问题.我们在每个ViewPager页面上嵌入了列表,并在更新列表数据时在列表适配器和视图寻呼机适配器上触发notifyDataSetChanged.

我们观察到的是,有时候,页面不会更新其视图树,即保持空白,或者有时甚至在分页时消失.来回寻呼几次时,内容会突然重新出现.似乎Android在这里缺少视图更新.我还注意到,在使用层次结构查看器进行调试时,选择一个视图将始终使其重新出现,这显然是因为层次结构查看器强制所选视图重绘自身.

我不能以编程方式完成这项工作; 使列表视图无效,甚至整个视图寻呼机都无效.

这与compatibility-v4_r7库有关.我也尝试使用最新版本,因为它声称修复了与查看寻呼机相关的许多问题,但它更糟糕的是(例如,手势被打破,以至于它不会让我不再遍历所有页面.)

是否还有其他人遇到这些问题,或者您是否知道可能导致此问题的原因?

android android-viewpager

84
推荐指数
4
解决办法
5万
查看次数

Java的WeakHashMap和缓存:为什么它引用了键而不是值?

Java的WeakHashMap经常被认为对缓存很有用.虽然它的弱引用是根据地图的键而不是它的值来定义的,但这似乎很奇怪.我的意思是,这是我想要缓存的值,除了缓存之外没有其他人强烈引用它们,我想要收集垃圾,不是吗?

以哪种方式有助于保持对密钥的弱引用?如果你这样做ExpensiveObject o = weakHashMap.get("some_key"),那么我希望缓存保持为'o',直到调用者不再持有强引用,并且我根本不关心字符串对象"some_key".

我错过了什么吗?

java caching weak-references

63
推荐指数
4
解决办法
2万
查看次数

为什么ListView项目不会增长以包装其内容?

我有一个相当复杂的ListView,具有可变列表项高度.在某些情况下,我需要在列表项中显示一个附加视图,默认情况下隐藏它(View.GONE).通过启用它(View.VISIBLE),列表项的高度增加(或者至少应该增加).

问题:即使我将项目的根布局声明为wrap_content,并且将项目中的每个组件声明为fill_parent,我隐藏/显示应该更改项目高度的视图只是在底部而不是其父级切断(项目布局)在高度上增长以完全显示它.

是否有任何与ListView相关的问题以及我可能错过的项目布局和项目高度?

更多观察:

出于测试目的,我现在已经将列表项布局简化为仅包含根LinearLayout和ImageView.当我将LinearLayout高度设置为例如200dip并将ImageView设置为fill_parent时,我原本期望ImageView增长直到达到其父级设置的200dip限制.

但是,图像将只是与其位图资源一样高(就好像我已将其设置为wrap_content)并且整个列表项将具有相同的高度(即,就好像我已将其设置为wrap_content一样).

但是,如果我将图像高度设置为例如200dip,则列表项的高度将增加,项目布局也将增加.

换句话说,完全忽略列表项布局的layout_height,因此除了硬编码像素值之外,ImageView上的任何高度值也是如此.

android listview

56
推荐指数
4
解决办法
7万
查看次数

如何显示可用目标列表?

我是相当新的Maven和我经常发现自己想看看有什么实际上在目标方面.

那么,是否有一个命令列出了例如给定前缀的所有可用目标?

maven-2

47
推荐指数
3
解决办法
2万
查看次数

IOException:"收到的身份验证质询为空"(Apache Harmony/Android)

我试图通过Android HttpURLConnection(从中导入org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection)发送GET ,并在收到响应时抛出IOException:

在doRequestInternal()中:"收到的身份验证质询为空"

这个错误意味着什么,是什么导致了这个?我正在向授权标题写OAuth参数,但我也在其他场合这样做,没有问题.

    if (connection == null) {
        connection = (HttpURLConnection) new URL(endpointUrl).openConnection();
        connection.setRequestMethod("GET");
    }

    //... do some OAuth message signing

    connection.connect();

    int statusCode = connection.getResponseCode(); // throws IOException
Run Code Online (Sandbox Code Playgroud)

java android httpurlconnection

35
推荐指数
2
解决办法
2万
查看次数