我正在使用Android Instrumentation测试来测试我的应用程序.
所以我有一个ActivityInstrumentationTestCase2包含多个测试的测试类扩展.代码如下所示:
public class ManageProjectsActivityTestextends ActivityInstrumentationTestCase2<ManageProjectsActivity> {
public ManageProjectsActivityTest() {
super("eu.vranckaert.worktime", ManageProjectsActivity.class);
}
@Override
protected void setUp() throws Exception {
getInstrumentation().getTargetContext().deleteDatabase(DaoConstants.DATABASE);
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
protected void runTest() throws Throwable {
super.runTest();
getActivity().finish();
}
public void testDefaults() {
// My test stuff
}
public void testAddProject() {
// My test stuff
}
}
Run Code Online (Sandbox Code Playgroud)
因此,正在测试的活动有一个项目列表.从数据库中检索项目列表.当没有可用的数据库时,所以在创建数据库时,我插入一个默认项目.
这意味着当测试运行时,这就是我所说的:
但这不是这个测试套件的作用......这是我的测试套件的结果:
在开始时我没有覆盖runTest()方法,但我认为也许我应该自己结束活动以强制重新创建,但它没有任何区别.
所以似乎DB保存在内存中(因为当我明确删除它时,甚至没有在设备上创建新的DB文件).甚至是活动,因为当在活动的onCreate中放置一个断点a时,我只会在那里进行两次测试.
为了维护DB我使用ORMLite.您可以在此处查看我的帮助程序类: …
我目前正在寻找在我的Android应用程序中构建备份功能.然而,在开始实施它之前,我有点挣扎,因为我不确定正确的方法是什么.
我在网上发现了一些有趣的文章,所以我提出了三种可能的解决方案:
现在我想知道你们对这三种解决方案的想法,或者你知道另一种解决方案(也许是更好的方法),你眼中的最佳方式是什么?
以下是我对可能的实现的评论:
我期待在这个问题上看到一些意见!
提前致谢!
KR,
短剑
我正在为一个拥有GLSurfaceView和GLSurfaceView.Renderer的客户编写一个Android应用程序.
我的整个OpenGL工作正常(它基本上是另一个开发人员首先在iOS上编写的端口).除了一件事.当加载视图并因此加载OpenGL的东西时,我的背景快速闪烁黑色,然后OpenGL开始正确渲染(使用我的背景).所以我做的是:
在onSurfaceCreated中我从这开始:
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
GLES20.glClearColor(0.9f + 0.1f * (21.0f / 255),
0.9f + 0.1f * (36.0f / 255),
0.9f + 0.1f * (31.0f / 255), 1.0f);
// Here goes my other stuff, if I comment all my other stuff out I still get the flash at startup
}
Run Code Online (Sandbox Code Playgroud)
在我的onDrawFrame方法中,我这样做:
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
// My stuff, again, if I comment all this stuff out I still get the …Run Code Online (Sandbox Code Playgroud) 对于我当前正在编写的应用程序,我已经实现了一个导航抽屉(具有向后兼容性的默认 Android 方式)。因此,从导航抽屉中选择一个菜单元素,然后我执行此操作(对于测试,addPreviousToBackStack 始终为 false):
private void replaceFragment(final Fragment fragment, final boolean addPreviousToBackStack) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.activity_main_fragment_container, fragment);
if(addPreviousToBackStack) {
fragmentTransaction.addToBackStack(fragment.getTag());
}
fragmentTransaction.commit();
currentFragment = fragment;
}
Run Code Online (Sandbox Code Playgroud)
所以当我启动应用程序时,这就像一个魅力。然后我使用后退按钮关闭应用程序。如果我随后重新打开应用程序(无论如何:通过长按主页按钮或通过快捷方式),应用程序将从初始屏幕启动(调用 onCreate),然后打开导航抽屉并选择一个菜单项,应用程序崩溃。
这是我的异常:“java.lang.IllegalStateException:无法在 onSaveInstanceState 之后执行此操作”
它恰好发生在我所做的事情上
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
我不知道为什么在重新打开应用程序时而不是在最初打开应用程序时收到此消息。有什么线索吗??