小编Igo*_*gor的帖子

Android:检查服务是否正在运行.bindService

检查Android服务是否正在运行的最佳方法是什么?我知道ActivityManagerAPI,但似乎不建议使用API​​类似于我的()方案.我也知道使用全局/持久变量来维护服务状态的可能性.

我试图使用bindService标志设置0,但我遇到了与链接上的人相同的问题(唯一的例外是,我正在尝试bindService使用本地服务).

以下电话

getApplicationContext().bindService(new Intent(getApplicationContext(),
        MyService.class), mServiceConnection, 0);
Run Code Online (Sandbox Code Playgroud)

始终返回true,但不会连接.这是预期的行为吗?在我看来,bindService如果服务尚未运行(不是,我已经检查过),或者如果BIND_AUTO_CREATE没有设置标志(再次,它不是),我应该返回false .

service android state

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

Robolectric ContentProvider测试

我注意到,不时有一个关于使用Robolectric测试自定义ContentProviders的问题.但是,对于如何正确地做到这一点,从来没有一个具体而明确的答案.我偶然发现了两种不同的方法:

但是,我得到了两种方法的java.lang.InstantiationException.有一些SO帖子说这是由于SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java)没有在Robolectric中被覆盖(Android + Robolectric - 在ContentProvider中的queryBuilder.query()中的RuntimeException/InstantiationException).

我想我的问题是 - 是否有任何优先解决方法可以使测试ContentProviders成为可能.或者是否有任何其他方法比上面提到的那些更好.

android unit-testing robolectric

14
推荐指数
2
解决办法
8220
查看次数

火花内存不足

我有一个包含150 G txt文件的文件夹(大约700个文件,平均每个200 MB).

我正在使用scala处理文件并最终计算一些聚合统计信息.我看到两种可行的方法:

  • 手动循环遍历所有文件,对每个文件进行计算并最终合并结果
  • 将整个文件夹读取到一个RDD,对此单个RDD执行所有操作,并让spark执行所有并行化

我倾向于第二种方法,因为它看起来更干净(不需要特定于并行化的代码),但我想知道我的方案是否适合我的硬件和数据所施加的限制.我有一个工作站,有16个线程和64 GB RAM可用(因此并行化将严格地在不同处理器核心之间本地化).我可能会在以后使用更多计算机扩展基础架构,但是现在我只想专注于调整这一个工作站场景的设置.

我正在使用的代码: - 读取TSV文件,并将有意义的数据提取到(String,String,String)三元组 - 然后执行一些过滤,映射和分组 - 最后,减少数据并计算一些聚合

我已经能够用一个单一的文件(〜200 MB的数据)来运行该代码,但是我收到java.lang.OutOfMemoryError:GC开销超过限制和/或Java进行添加更多的数据时,堆异常(在应用程序中断了6GB的数据,但我想将它与150 GB的数据一起使用).

我想我必须调整一些参数才能使其工作.我将不胜感激任何有关如何解决此问题的提示(如何调试内存需求).我已经尝试增加'spark.executor.memory'并使用较少数量的内核(理性的是每个内核需要一些堆空间),但这并没有解决我的问题.

我不需要解决方案非常快(如果需要,它可以轻松运行几个小时甚至几天).我也没有缓存任何数据,但最后只是将它们保存到文件系统中.如果您认为使用手动并行化方法更可行,我也可以这样做.

scala apache-spark

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

在getView中自定义ArrayAdapter setBackground

我正在开发一个ListActivity,它会显示一堆数字(权重).我想更改ListView中特定行的背景.为此,我创建了ArrayAdapter类的自定义实现,并重写了getView方法.适配器接受数字列表并将数字20的背景设置为黄色(为简单起见).

    public class WeightListAdapter extends ArrayAdapter<Integer> {

    private List<Integer> mWeights;

    public WeightListAdapter(Context context, List<Integer> objects) {
        super(context, android.R.layout.simple_list_item_1, objects);

        mWeights = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = super.getView(position, convertView, parent);

        int itemWeight = mWeights.get(position);
        if (itemWeight == 20) {
            v.setBackgroundColor(Color.YELLOW);
        }
        return v;
    }

}
Run Code Online (Sandbox Code Playgroud)

问题是,不仅数字20的行获得黄色背景,而且数字0的行(第一行),我不知道为什么会这样.

我在getView方法中做错了什么(比如调用super方法)?我实现的原因是:所有返回的视图应该是相同的(这就是我调用super方法的原因)只有适合if条件的视图才应该更改.

谢谢你的帮助!

android listview android-arrayadapter

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

加速度计信号分割

替代文本

我有一个一维加速度计信号(仅一个轴)。我想创建一个强大的算法,它能够识别信号中的某些形状。

首先,我对原始信号应用移动平均滤波器。在附图中,原始信号为红色,平均信号为黑色。从图中可以看出,从平均(黑色)信号中可以看到一些趋势 - 该信号包含 10 次类似峰值模式的重复,其中加速度攀升至最大值,然后又下降。我用十字标记了这些模式的开始和结束。

所以我的目标是自动找到标记的位置。导致模式提取困难的问题是:

  • 模式开头的 y 值可能与模式结尾的不同
  • 该模式可能有多个峰值
  • 我没有任何具体的时间信息(从模式的开始到结束需要一个时间单位)

我尝试过不同的方法,这些方法几乎都是自制的,所以我不会提及它们 - 我不想让你因为我的思维方式而产生偏见。是否有一些标准或书本方法来进行这种模式提取?或者也许有人知道如何以稳健的方式解决这个问题?

任何想法将不胜感激。

signals pattern-recognition accelerometer

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

R all.equal中可能存在的错误

我在R的all.equal函数中遇到了一些奇怪的行为.基本上,我以不同方式创建两个相同的data.frames,然后调用all.equal函数(也检查数据和属性).

重现行为的代码如下:

var.a <- data.frame(cbind(as.integer(c(1,5,9)), as.integer(c(1,5,9))))
colnames(var.a) <- c("C1", "C2")
rownames(var.a) <- c("1","5","9")

var.b <- data.frame(matrix(NA, nrow = 10, ncol = 2))
var.b[, 1] <- 1:10
var.b[, 2] <- 1:10
colnames(var.b) <- c("C1", "C2")
var.b <- var.b[seq(1, nrow(var.b), 4), ]

all.equal(var.a, var.b)
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我错过了一些东西?我对all.equall函数做了很多调试,看起来问题是data.frames的rownames(一旦它们成为一个字符,另一次是数字向量).all.equall函数的响应:

[1]"属性:<组件2:模式:字符,数字>"
[2]"属性:<组件2:目标是字符,当前是数字>"

然而,

typeof(rownames(var.a))== typeof(rownames(var.b))

返回TRUE,这让我很困惑.

PS:对象的结构看起来是一样的:

> str(var.a)
'data.frame':   3 obs. of  2 variables:
$ C1: int  1 5 9
$ C2: int  1 5 9
> str(var.b)
'data.frame':   3 obs. of  2 variables: …
Run Code Online (Sandbox Code Playgroud)

r

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

WeakReferences的HashMap,用于在活动之间传递数据

我特别感兴趣的是官方android FAQ中的以下建议.

WeakReferences对象的HashMap

您还可以使用WeakReferences的HashMap到具有长键的对象.当活动想要将对象传递给另一个活动时,它只是将对象放入地图中,并通过意图附加功能将密钥(基于计数器或时间戳的唯一Long)发送给收件人活动.收件人活动使用此密钥检索对象

我还没有找到如何正确实现这一点的方法.我不确定为什么WeakReferences在这里是首选,为什么不使用硬引用.

我的实现(我想从活动A服务B发送类XY的实例):

代码使用硬引用.我为什么要在这里使用弱引用(如FAQ所提出的)?并且这样的使用模式可以传递数据,或者您更喜欢其他内容.

android communication weak-references hashmap

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