我的Activity正在尝试创建一个AlertDialog,它需要一个Context作为参数.如果我使用,这可以按预期工作:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Run Code Online (Sandbox Code Playgroud)
但是,我很谨慎地使用"this"作为上下文,因为当Activity被销毁并重新创建甚至在屏幕旋转之类的简单事件时,可能会发生内存泄漏.来自Android开发者博客上的相关帖子:
有两种简单的方法可以避免与上下文相关的内存泄漏.最明显的一个是避免在其自身范围之外逃避上下文.上面的例子显示了静态引用的情况,但内部类及其对外部类的隐式引用可能同样危险.第二种解决方案是使用Application上下文.只要您的应用程序处于活动状态并且不依赖于活动生命周期,此上下文就会存在.如果您计划保留需要上下文的长期对象,请记住应用程序对象.您可以通过调用Context.getApplicationContext()或Activity.getApplication()轻松获取它.
但是对于这AlertDialog()
两者来说,getApplicationContext()
或者getApplication()
作为一个Context是可接受的,因为它抛出异常:
"无法添加窗口 - 令牌null不适用于应用程序"
那么,这真的应该被视为一个"错误",因为我们被正式建议使用Activity.getApplication()
,但它没有宣传的功能吗?
吉姆
我在使用SSL时遇到问题,因为我收到了与我的密钥库相关的以下错误(使用keytool自行创建和自签名:http://developer.android.com/tools/publishing/app-signing.html) :
08-14 20:55:23.044:W/System.err(5430):java.io.IOException:密钥库的错误版本.08-14 20:55:23.060:W/System.err(5430):at org.bouncycastle.jce.provider.JDKKeyStore.engineLoad(JDKKeyStore.java:812)...
JDKKeyStore.java
类中引发的错误出现在以下代码中:
来自JDKKeyStore.java的Blockquote:
if(version!= STORE_VERSION){if(version!= 0){throw new IOException("key store的错误版本."); }}大段引用
在这种情况下,STORE_VERSION = 1,我的版本= 3基于读取我创建的密钥库所持有的证书的详细信息.我不知道如何生成包含version = 1证书的密钥库.
我发现这个答案很有帮助: 在进行https调用时错误的版本密钥库
但是它要求使用以下参数创建密钥库:
-storetype BKS
-provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath
/path/to/bouncycastle.jar
但是,当我尝试使用以下参数创建keytool(使用Mac上的终端应用程序)时:
keytool -genkeypair -v -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 -keypass android -keystore /Users/djames/dropbox/bc146keystore/debug.keystore -storepass android -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /用户/ djames /保管箱/ bc146keystore /
(其中/ Users/djames/dropbox/bc146keystore /是充气城堡罐子的路径:bcprov-jdk16-146.jar)
我收到以下错误:
keytool错误:java.lang.RuntimeException:用法错误,?providerpath不是合法命令java.lang.RuntimeException:用法错误,?providerpath不是sun.security.tools.KeyTool.parseArgs的合法命令(KeyTool.java: 375)sun.security.tools.KeyTool.run(KeyTool.java:171)at sun.security.tools.KeyTool.main(KeyTool.java:166)
我不明白这告诉我的是什么.如果我使用:keytool -help它告诉我以下是-genkeypair选项的有效选项:
-genkeypair [-v] [-protected] [-alias] [-keyalg] [-keysize] [-sigalg] [-dname] [-validity] …