运行很多次我的应用程序后,我遇到内存问题.
java.lang.OutOfMemoryError:位图大小超过VM预算
我想我以某种方式泄漏了内存所以我做了一个DUMP HPROF文件并使用MAT工具找出错误.事实证明,在运行5次app并退出之后,我找到了5个Activity的实例和5个PhoneStateListener实例.
如果我删除对PhoneStateListener的调用,我不再有这个问题,我只看到我的Activity的一个实例.
问题是,我该如何解决这个问题?
谢谢
丹尼尔
这是我的代码:
OnCreate方法:
telephonyManager.listen(mPhoneListener,
PhoneStateListener.LISTEN_SERVICE_STATE
| PhoneStateListener.LISTEN_SIGNAL_STRENGTH
| PhoneStateListener.LISTEN_CALL_STATE
| PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
| PhoneStateListener.LISTEN_DATA_ACTIVITY);
Run Code Online (Sandbox Code Playgroud)
在Activity类上:
PhoneStateListener mPhoneListener = new PhoneStateListener() {
public void onCallStateChanged(int state,
java.lang.String incomingNumber) {
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
on onDestroy方法:
telephonyManager.listen(mPhoneListener, PhoneStateListener.LISTEN_NONE);
mPhoneListener = null;
Run Code Online (Sandbox Code Playgroud) 我想找出当前系统时间与插入数据和时间之间的差异String.我试过这个:
try {
String strFileDate = "2012-04-19 15:15:00";
DateFormat formatter2 = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
Date date = formatter2.parse(strFileDate);
long difference = date.getTime() - System.currentTimeMillis();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(difference);
Toast.makeText(getBaseContext(),
formatter2.format(calendar.getTime()), Toast.LENGTH_LONG)
.show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但它没有给我正确的结果.我做得对吗?
我试着跟着::
String strFileDate = "2012-04-19 15:15:00";
DateFormat formatter2 = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
Date date = formatter2.parse(strFileDate);
long diffInMs = date.getTime()
- new Date(System.currentTimeMillis()).getTime();
long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diffInMs);
long hour = diffInSec …Run Code Online (Sandbox Code Playgroud) 目前,我使用以下XML文件来动画ImageView:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/anticipate_overshoot_interpolator">
<scale
android:fromXScale="0.5"
android:fromYScale="0.5"
android:toXScale="1.0"
android:toYScale="1.0"
android:pivotX="1.0"
android:pivotY="1.5"
android:duration="500"></scale>
</set>
Run Code Online (Sandbox Code Playgroud)
但是比例从左上角开始.我想在底部中心开始比例.我玩了一些它的价值,但我仍然无法实现它.
我目前正在使用magento建立一个在线商店.
下订单后,客户会自动收到"订单确认".但是,我想首先检查是否可以处理此订单(由于多种原因),然后发送"订单接受"电子邮件,说明我们已接受订单开始处理它.
我不相信magento缺乏这个功能.
但是我还需要发送其他几封电子邮件:
有没有人有任何线索,这样的事情是如何完成的?
提前致谢!
我使用位图从URL获取图像
public void loadImage(String url){
try {
bitmap = BitmapFactory.decodeStream((InputStream)new URL(url).getContent());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
无论如何我可以从这里调整图像大小吗?设置它的宽度和高度仍然保持分辨率?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />"/sdcard/filename".我猜Nexus没有外部SD支持但S2有,我认为这可能会导致路径出现问题.我该如何优雅地处理这样的案件?
我试图将EditText字段中的字符串与共享首选项中的字符串进行比较.如果字符串匹配,则启动新活动.Sharedpreferenced中的字符串使用Base64编码.我试图将编辑文本字符串与sharedpreferences字符串进行比较后解码但无法正确编码.我怎样才能正确编码.例子表示赞赏.我的比较器在第77和78行
44. public void onClick(View arg0) {
45.
46. sp=this.getSharedPreferences("AccessApp", MODE_WORLD_READABLE);
47.
48.
49.
50.
51. byte[] key = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };
52.
53.
54. try {
55. user = sp.getString("USERNAME_KEY", null);
56. String decryptedUser = decrypt(user, key);
57.
58.
59. }
60. catch (Exception e) {
61. // TODO Auto-generated catch block
62. e.printStackTrace();
63. }
64. try {
65. pass = sp.getString("PASSWORD_KEY", null); …Run Code Online (Sandbox Code Playgroud)