我是测试世界的新手,更是Android测试世界的新手.在对Robolectric进行研究时,有助于对android进行测试的一件事让我感到困惑.有时在网络上我看到人们testCompile在引用Robolectric而其他人使用时在gradle构建脚本的依赖关系中使用关键字androidTestCompile.当然两者都无效?
有人可以解释两者之间的区别,以及使用Robolectric时应该使用哪一个?
android gradle robolectric android-testing android-gradle-plugin
在过去的几个小时里,我正在阅读相当多shutdown()的内容ExecutorService,除非我们有一个庞大的应用程序存储,几十个和几十个不使用的不同的执行程序服务,我根本看不出有任何理由(有正当理由).很长时间.
关闭所做的唯一事情(从我收集的内容)是正常线程完成后所做的事情.当普通的Thread完成Runnable(或Callable)的run方法时,它将被传递给Garbage Collection进行收集.使用Executor Service,线程将被暂停,不会为垃圾收集打勾.为此,需要关机.
好的,回到我的问题.是否有任何理由ExecutorService经常或甚至在提交一些任务后立即调用关机?我想留下有人正在做的情况,并在调用之后,awaitTermination()因为这是有效的.一旦我们这样做,我们必须重新创建一个新的ExecutorService,做同样的事情.是不是ExecutorService重用线程的整个想法?那么为什么要ExecutorService这么快就毁灭呢?
简单地创建ExecutorService(或依赖于你需要的数量)是不是一种合理的方式,然后在应用程序运行期间,一旦它们出现就将任务传递给它们,然后在应用程序出口或其他一些重要阶段关闭那些执行程序?
我想从一些经验丰富的编码员那里回答,他们使用ExecutorServices写了很多异步代码.
第二个问题,与平台有点小的交易.如果你们中的一些人会说每次关闭执行程序并不是最好的想法,并且你在android上编程,你能不能告诉我当你处理不同的事件时你如何处理这些关闭(具体来说 - 当你执行它们时)应用生命周期.
由于CommonsWare的评论我发布了中立的帖子.我真的没有兴趣争论死亡,似乎它在那里领先.如果他们愿意分享他们的经验,我只对从经验丰富的开发者那里了解我的问题感兴趣.谢谢.
任何人都可以确认以下关于Android应用程序生命周期?
1)当应用程序在前台时,内存将包含Application对象的实例,所有活动的实例(未被杀死)以及从其中一个根引用的所有对象引用(尚未被垃圾回收)
2)当应用程序进入后台时,在某些时候Android框架可以:a)杀死给予应用程序目的的整个过程,这将完全删除内存中的所有对象b)仅杀死(所以必须没有其他对象引用将被删除)活动(通过完成它们并且实质上是任何片段)保存它们的状态并创建活动堆栈并留下任何其他东西(应用程序对象,任何其他静态对象,可从任何根目录访问的引用).
我最感兴趣的是2b,但是我会对所有这些点进行确认,因为我试图从头到尾抓住整个概念.
是否有任何快捷方式可以折叠/扩展区域?意思是,如果我有一个包含5个方法的区域,并且我遇到崩溃,那么该区域将会崩溃,当我将命中展开时,该区域将会扩展,我将看到所有5个方法具有与之前相同的状态(折叠/展开).
目前我发现的快捷键会折叠ALL,或者展开ALL,或者将"All"字替换为"Current"字样.
我正在寻找一个只会折叠区域的快捷方式,并且不会对区域内的其他区块做任何事情.扩展同样的事情.
如果没有这样的事情,也许有人找到了一些视觉扩展来做到这一点?
欢呼卢卡斯
关于Quicksort(Java)的网络上的许多例子都接近于此:
private void quicksort(int low, int high) {
int i = low, j = high;
int pivot = numbers[low + (high-low)/2];
while (i <= j) {
while (numbers[i] < pivot) {
i++;
}
while (numbers[j] > pivot) {
j--;
}
if (i <= j) {
exchange(i, j);
i++;
j--;
}
}
if (low < j)
quicksort(low, j);
if (i < high)
quicksort(i, high);
}
Run Code Online (Sandbox Code Playgroud)
我很困惑的是为什么有那些平等的检查:
1)while (i <= j)而不是while (i < j)
2)if (i …
让我们假设我计划在我的整个应用程序中使用一个executorservice,我正在发送新的runnable或callable来执行/提交,并且我在执行此操作后立即拒绝关闭.我只想把我的"任务"扔给executorservice并让他处理它们并执行它们给它的资源(他有多少线程可用,如果需要他可以创建多少线程,然后相应地排队这些任务).
根据您在Android应用程序中使用ExecutorService的经验,并考虑应用程序状态更改,如果我不想通过执行以下操作来不断关闭并重新创建执行程序服务:
executor = Executors.newCachedThreadPool();
executor.submit(some Runnable);
executor.shutdown();
Run Code Online (Sandbox Code Playgroud)
,你什么时间和地点建议关闭服务,然后恢复它,以便我可以防止一些泄漏或一些不可预见的后果?
我主要是为了:
1)通过Backstack中最后一个活动的后退按钮关闭应用程序(应用程序使用许多活动)2)应用程序在后台进行(在任何这些活动中)3)应用程序返回到前台(在任何这些活动上)
我在Eclipse中遇到TFS问题.它运行良好,但是当我尝试检入时,我收到通知我发送的文件与存储在服务器上的文件有冲突,我无法将更改从左(本地文件)复制到右(服务器) )在比较窗口.我只能从右向左复制,选项"从左到右复制"和"从左到右复制当前更改"显示为灰色.
这里有什么我想念的吗?
或者也许是这样的:我在左侧进行更改,并且左侧(本地)版本已签入.但如果是这种情况,那么为什么提交按钮在开头是灰色的?
卢卡斯
我正在寻找其他人是否也遇到了这个问题,如果他找到了原因.
发生了什么事:
我有几十个不同的项目.其中一个是这个项目:
我曾经帮助过我.除了导入它之外,我没有对该项目做任何事情.那是几个月前的事.那时我有Eclipse 3.7.
与此同时,我发现Eclipse Juno已经出局了,并且想要尝试一下.所以我做了,但后来因为几个不同的问题我决定暂时还原.我发现了Eclipse的3.8版本,所以我试了一下,离开了我的eclipse环境一段时间.
今天我打开Eclipse,因为我想做一些工作,我发现超过一半的项目(工作项目)停止工作,并给了我这个错误或一些类似的错误:
05-18 19:53:01.672: E/AndroidRuntime(3939): FATAL EXCEPTION: main
05-18 19:53:01.672: E/AndroidRuntime(3939): java.lang.RuntimeException: Unable to instantiate activity
ComponentInfo{com.example.android.bitmapfun/com.example.android.bitmapfun.ui.ImageGridActivity}:
Run Code Online (Sandbox Code Playgroud)
与ClassNotFound异常有关的Basicaly错误.我对自己说,这很奇怪.我开始调查,几个小时后我发现了一些搞砸我的.classpath(构建路径)文件的东西.我再次下载了示例项目,它的classpath文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
Run Code Online (Sandbox Code Playgroud)
但我的本地项目中的.classpath文件看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
Run Code Online (Sandbox Code Playgroud)
我向上帝发誓我没有接触到那个项目,因为我一段时间后进口了它,当时它处于工作状态.
编辑构建路径本身不起作用.即使关闭和重新开放项目也无济于事.我不得不重新启动eclipse,只有这样,当我编辑.classpath文件(或构建路径)时,它再次起作用.
我还发现,导出选项卡未更新.例如,如果我添加一些库,它会被添加到依赖项中,但是为了在运行时找到它的类,必须将其导出.我从来没有(几乎从未)触摸过这个标签,所以一旦我添加了不同的库,就必须自动"检查",但现在看来它并没有这样做.
我不知道这是做什么的,我希望它不是Eclipse Juno,它有(有)某种bug.有没有人遇到过这个?
这里有一个小问题.
我是否有可能像使用Windows的任务栏(自动隐藏)一样制作包浏览器自动隐藏?
我知道有快速查看,我确实使用它,但自动隐藏会更好.是否有可能在某处设置选项?
我是Git世界的初学者,以前只专注于集中版本控制机制,即微软的TFS(tfvc).我已经阅读了关于stackoverflow的几个教程,社论,问题/答案,以及创建了我工作的几个git存储库,但到目前为止还没什么花哨的.
我很好奇为什么经常会遇到这样的声明:"为什么我以前担心分支,但不再使用git",或者那种类似的东西?我不是在质疑这个陈述,我只是在寻找原因,为什么会这样.
从我读过的社论,到目前为止我如何理解git架构,我确实理解分支是如何容易的,它是多么轻量级(分支只是提交的指针),但仍然没有什么神奇的避免合并冲突等冲突如何产生的方案是一样的,那么为什么我,作为git世界的初学者,不应该害怕做多个分支,在它们之间切换,提交,合并等等?
到目前为止,我在一个小团队工作,所以我们每个项目有1/2人,所以几乎没有合并冲突(没有惊喜),但是说你有一个由50名工程师组成的团队,他们都在研究各个部分.应用程序,我不禁想到,当所有这些提交开始相互交叉时,它只是偶尔对他们来说是一场噩梦.
有一个公司惯例,像同样的IDE,相同的whitespacing方案等,都很好,但它适用于任何版本控制机制,不是吗?所以,要完成我的小话,并重复主要问题:
"为什么我不担心在git和其他版本控制机制上工作?"
提前致谢