小编Gli*_*tch的帖子

找到并修复大堆大小的原因

我想弄清楚为什么我的应用程序使用了这么多内存.我经常看到它使用15到18MB之间,这远远高于我的预期.我通过DDMS查看了堆大小,看到了这个:

在此输入图像描述

这看起来有点可疑,因为我的应用程序根本不处理大图像.事实上,我的应用程序中drawables的总和大约是250KB.所以我创建了一个堆转储并使用MAT来找到所有这些内存的去向.byte []数组是迄今为止最大的消费者,所以我深入研究并注意到以下内容:

在此输入图像描述

我完全不知道为什么sPreloadedDrawables负责这么高的保留堆大小.我也不知道如何确定根本原因,或者如何"修复"它.

我应该从哪里出发?我的应用程序主要通过不处理图像数据的服务在后台运行.我确实有用户可以选择使用的活动,但同样,他们使用的小型drawable不能解释如此大的堆大小.我还检查了任何令人讨厌的活动泄漏事件等,但没有找到任何.

编辑:我注意到在模拟器中运行时堆大小要大得多.这很令人困惑.:/

android memory-management ddms

53
推荐指数
1
解决办法
7724
查看次数

使用"沉浸式模式"检测系统按钮何时可见

我目前正在为我的一个活动使用沉浸式模式(API 19),如下所示:

getWindow().getDecorView()
            .setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                            | View.INVISIBLE);
Run Code Online (Sandbox Code Playgroud)

这会隐藏系统按钮和通知栏,直到用户向后滑动它们.这工作正常,但是我想检测用户何时再次显示按钮.我已经尝试了OnSystemUiVisibilityChangeListener但是它不会触发这个特定的事件.

有任何想法吗?

android android-4.4-kitkat

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

Google如何在他们的G +应用中获得动画帖子?

我喜欢滚动浏览Google+应用中的帖子时出现的动画,但我无法弄清楚他们是如何实现的.

当它们出现时,会采用什么技术来制作帖子?我不是在寻找动画本身,而是我如何将任何动画应用于可滚动项目列表.

谢谢.

android google-plus

13
推荐指数
1
解决办法
2254
查看次数

在Android中实现逐渐淡化亮度的清洁方式?

目前我有代码来淡化亮度调整,看起来像这样:

new Thread() {
    public void run() {
        for (int i = initial; i < target; i++) {
            final int bright = i;
            handle.post(new Runnable() {
                public void run() {
                    float currentBright = bright / 100f;
                    window.getAttributes().screenBrightness = currentBright;
                    window.setAttributes(window.getAttributes());
                });
            }
            try {
                sleep(step);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}.start();
Run Code Online (Sandbox Code Playgroud)

我不确定这是否被认为是好方法论(我考虑过使用ASyncTask,但我看不出这种情况下的好处).是否有更好的方法来实现背光衰减?

编辑:我现在使用TimerTask如下:

new Timer().schedule(new TimerTask() {
    @Override
    public void run() {
        final float currentBright = counter[0] / 100f;
        handle.post(new Runnable() {    
            public void run() { …
Run Code Online (Sandbox Code Playgroud)

android brightness fading

11
推荐指数
1
解决办法
1391
查看次数

处理多个对象时的良好编程风格

我一直在编写一个棋盘游戏的软件版本.到目前为止,我已经编写了与游戏板上的物理对象相对应的类.我很喜欢编写程序逻辑,但是我发现很多逻辑类都需要访问相同的对象.

起初我将相应的对象传递给方法,因为它们被调用,但这变得非常乏味,特别是当方法需要许多对象来执行它们的任务时.为了解决这个问题,我创建了一个初始化和存储我需要的所有对象的类.这允许我通过调用Assets.dice()从任何类访问对象.

但是现在我已经考虑过了,这似乎不对.这就是为什么我在这里,我担心我创造了某种神级.这种恐惧是没有根据的,还是我创造了灾难的秘诀?

java oop coding-style object shared-objects

10
推荐指数
1
解决办法
846
查看次数

在没有onSensorChanged()事件的情况下从光传感器获取勒克斯值?

只是想知道,有没有办法在Android手机上获得光传感器的价值,而无需等待onSensorChanged()事件发生?为了节省电量,我在获得单个lux值后使用registerListener()和unregisterListener(),但是下次我注册监听器以获取另一个值时,如果该值与之前相同,我的应用程序就坐在那里等待一个事件可能需要一段时间才会发生(通常在光线不足的情况下).

那么,有没有一种方法可以在不等待onSensorChanged()事件的情况下读取lux值?或者我应该只有100毫秒超时,然后使用我记录的最后一个值?

谢谢!

java android android-sensors

7
推荐指数
1
解决办法
1110
查看次数

Android光传感器不会触发事件

使用光传感器时,我遇到了一个永远不会触发onSensorChanged()事件的问题.原因是当监听器被注册时,如果勒克斯值保持不变,则没有变化,因此没有事件.但是,我仍然想知道勒克斯的价值!恒定勒克斯值0和常数60,000之间存在差异!

经过一些研究,我意识到没有办法直接读取传感器的勒克斯值.那么如果lux值是常数,如何获得lux值,从而永远不会触发事件?有没有办法最初设置一个假值(如-1),所以总会发生一个事件?或者我在考虑这个错误?

任何帮助将不胜感激!

events android light android-sensors

5
推荐指数
1
解决办法
4370
查看次数

进行点击活动

我正在尝试以编程方式调整手机的亮度.我的应用程序中有一个半透明的活动,但用户无法点击它到它下面的活动/窗口.一旦设置了亮度,我就会终止此活动,但是我想在此活动中做更多的工作(例如逐渐调整亮度),这需要一些时间,而且我不希望用户点击他们的手机,想知道为什么他们的行动没有注册.

所以基本上,我需要创建一个模拟窗口,它将成功地允许我调整屏幕亮度而不显示,或者找出如何进行活动点击.我不知道怎么做.

顺便说一下,这是在Activity中进行亮度调整的代码:

android.provider.Settings.System.putInt(getContentResolver(),
            android.provider.Settings.System.SCREEN_BRIGHTNESS, Math.round(SOME_BRIGHTNESS * 255f));

Window window = getWindow(); 
window.getAttributes().screenBrightness = SOME_BRIGHTNESS;
window.setAttributes(window.getAttributes());

float sysBrightPer = getSystemBrightness(getApplicationContext());   

new Thread() {
    public void run() {
         try {
             sleep(BRIGHT_TIMEOUT);
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
         finish();
    }
}.start();  
Run Code Online (Sandbox Code Playgroud)

有什么建议?

PS我在市场上发现了这个应用程序.我想知道这种方式是否会对我有所帮助?https://market.android.com/details?id=com.haxor

android window android-activity

4
推荐指数
1
解决办法
2476
查看次数

窗口小部件未在启动器重启时更新

我有一个小部件,只要有配置更改(例如屏幕方向),每当手机解锁时,它都会自动更新.此过程涉及onClick为我的小部件上的按钮设置处理程序.这很好用,但是我发现有一个使用案例会导致我的应用无法响应onClick事件.这种特殊情况是每当启动器重新启动时.

有没有办法检测启动器何时重启,所以我可以手动更新我的小部件?或者还有另一种方法可以确保onClick处理程序不会丢失吗?

android widget launcher android-pendingintent

4
推荐指数
1
解决办法
3510
查看次数

在更改文本时动画淡入/淡出TextView

基本上我想用一个AlphaAnimation淡出一个TextView,然后改变它的文本TextView,然后最后再用另一个淡化它AlphaAnimation.但我不知道如何按顺序执行此操作.实现这一目标的最佳方法是什么?

animation android

0
推荐指数
1
解决办法
4024
查看次数