信息:我的设备是带有2.2的Nexus One,我测试了两个项目,一个在1.5上,一个在2.1上.
问题:当屏幕关闭和打开时,我无法理解应用程序的生命周期.
这是我的输出
// activity starts
08-04 17:24:17.643: ERROR/PlayActivity(6215): onStart executes ...
08-04 17:24:17.643: ERROR/PlayActivity(6215): onResume executes ...
// screen goes off
08-04 17:24:28.943: ERROR/PlayActivity(6215): onPause executes ...
08-04 17:24:32.113: ERROR/PlayActivity(6215): onStop executes ...
08-04 17:24:32.113: ERROR/PlayActivity(6215): onDestroy executes ...
08-04 17:24:32.983: ERROR/PlayActivity(6215): onStart executes ...
08-04 17:24:32.983: ERROR/PlayActivity(6215): onResume executes ...
08-04 17:24:32.983: ERROR/PlayActivity(6215): onPause executes ...
// screen goes on
08-04 17:24:47.683: ERROR/PlayActivity(6215): onResume executes ...
// lock removed
08-04 17:24:56.943: ERROR/PlayActivity(6215): onPause executes ...
08-04 17:24:59.663: …Run Code Online (Sandbox Code Playgroud) 在我工作的公司,我们有一个成功的软件产品表现不错,但现在已经过时且不可维护.我想解释一下,为了生存,你需要创新并用新产品替换这个产品.我正在寻找一些公司的好例子,这些公司犯了我们即将犯下的错误 - 依靠一个成功的产品方式超过它的正常生命,所以我可以在做出论证时用它作为例证.
这些产品不一定是软件,象征性的案例,很好地说明了这种情况,但产品不是软件也受到赞赏.
我注意到Android开发者活动部分自我启动应用程序以来已经更新,但我仍然不清楚最简单的活动生命周期是什么.
据我所知:
onCreate,onResume和onPause是必不可少的.
在onPause之后的任何时候都可以删除该活动,因此我应该将整个应用程序状态保存到onPause文件中,而不是依赖onStop或onDestroy.此外,onSaveInstanceState在每个onPause之前都没有被调用,因此不值得使用.
而不是尝试编写大量代码来处理所有场景,为什么不在onPause结束时销毁Activity?
然后,生命周期将在onCreate和onResume处于活动状态之前,然后onPause处于非活动状态时.不需要其他方法.
我使用onCreate调用setContentView并设置视图侦听器,但其他所有内容都将放在onResume中,包括从文件加载恢复的状态?如前所述,onPause会将状态保存到文件并销毁活动.
据我所知,这方面的唯一缺点可能是当屏幕上显示弹出窗口时,活动将被删除,并且必须在弹出窗口关闭时重新创建,这意味着活动将不会在弹出窗口后面显示(尽管我没有测试过这个)
重新启动活动可能需要更长的时间,但由于系统可能在没有任何通知的情况下删除了活动,因此无论如何都必须保存整个状态.
有什么想法吗?
更新:我想我想到的是"首页"活动所谓的游戏活动.当玩家点击"播放"时,首页活动会调用游戏活动
游戏活动将在onCreate中设置其视图和监听器等,并且在onResume中它将加载包含游戏状态的文件,或者如果不存在文件则开始新游戏.
onPause游戏,它将游戏状态写入文件,然后无论游戏活动发生什么(没有,或被停止/销毁,或其他),onResume方法将始终从文件中重新加载所有数据.
那是我在想什么,如果这有道理的话?
Update2:我已经设计了一个简单的解决方案,我已在下面的答案中记录,如果有人感兴趣的话!
它不支持Android Activity Lifecycle'Paused'和'Stopped'状态.一旦它不再显示它就会自动杀死并且必须手动重启,但它会从你离开的地方继续进行!
我有一个变量,我使用onSaveInstanceState成功保存和恢复
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); // the UI component values are saved here.
outState.putDouble("VALUE", liter);
Toast.makeText(this, "Activity state saved", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
但这仅在活动被销毁时才有效.我希望通过覆盖onPause()方法来保存相同的变量,并且当活动不再暂停时返回任何关于如何执行此操作的任何想法都非常感谢
我的项目包括多个Java项目,一个Java-JNI-C++项目作为桥梁和一个保持算法库的纯C++项目.我设法为所有3种项目编写Maven构建配置.因此,当我在命令行(Windows 7,64位)上调用它们时,一切都很好.
我不使用任何make文件或类似的东西.我使用exec-maven-plugin在没有cygwin的情况下调用我的mingw 64bit安装(我也没有至少知道安装msys).因此,每个JNA和Library Project都有2个纯命令行g ++命令.
我现在需要的平滑开发工作流程是能够在Eclipse中构建和调试这些项目,但是使用maven构建脚本,因为我不想将工作放入我的poms并另外配置eclipse构建器.这应该是一致的!此外,Eclipse中的错误解析应该与maven构建的输出保持一致.
对于我的Java项目,这开箱即用.Eclipse选择了maven配置,CLEAN和BUILD产生了应有的功能.(虽然我看到Java Builder仍然在项目的属性中处于活动状态.为什么?).但我不能让它与CDT合作.
当我禁用C++ Builder Eclipse时,只使用maven构建(我想要的),但clean命令无法正常工作.此外,我得到错误标记,这些错误不是编译器的错误.当然这应该是一致的.
是否有针对此用例的教程?
我没有找到有关该主题的信息.我不确定我是否一般会错误的方向错过最佳做法或什么?!
由于这是我的第一个问题,请随时给我反馈我的问题.我能提供什么;-)
一些信息:
系统Windows 7,64位
Eclipse Juno,m2e
图书馆POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>mylib</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MyLib</name>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<versionRange>[1.1.1,)</versionRange>
<goals>
<goal>exec</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>true</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<id>compile-Windows_x64</id>
<phase>compile</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>g++</executable>
<workingDirectory>target/cpp/Windows_x64</workingDirectory>
<arguments>
<argument>-Wall</argument> …Run Code Online (Sandbox Code Playgroud) 我真的对Fragment 生命周期感到困惑,尤其是在打电话的时候getActivity().有时候,你不能得到Activity通过getActivity().它总是引起一些令人费解的错误.
谢谢任何人都可以解决这个难题.
由于异步方法问题,我收到错误消息.在我的终端,我看到:
Warning: Can't call setState (or forceUpdate) on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method.
- node_modules/fbjs/lib/warning.js:33:20 in printWarning
- node_modules/fbjs/lib/warning.js:57:25 in warning
- node_modules/react-native/Libraries/Renderer/ReactNativeRenderer-dev.js:12196:6 in warnAboutUpdateOnUnmounted
- node_modules/react-native/Libraries/Renderer/ReactNativeRenderer-dev.js:13273:41 in scheduleWorkImpl
- node_modules/react-native/Libraries/Renderer/ReactNativeRenderer-dev.js:6224:19 in enqueueSetState
- node_modules/react/cjs/react.development.js:242:31 in setState
* router/_components/item.js:51:16 in getImage$
- node_modules/regenerator-runtime/runtime.js:62:44 in tryCatch
- node_modules/regenerator-runtime/runtime.js:296:30 in invoke
- ... 13 more stack frames from framework …Run Code Online (Sandbox Code Playgroud) 我听说按下后退按钮基本上会导致当前的Activity finish().总是这样吗?看起来就像它将Activity弹出堆栈的方式一样.
我不太确定的一种情况是当任务中的根活动被按下时.我目前正在经历一种非常奇怪的效果,描述如下:
在加载我的应用程序时,第一个Activity用于初始化,一旦完成,它将调用我的主Activity(TabActivity).这个第一个init活动在Manifest中设置了android:noHistory ="true",所以从我的主Activity中按回来将不会回到那个.它发送到启动器.当我第二次在Launcher中单击我的应用程序时,初始化活动再次加载,并在完成后加载主Activity.几乎在紧接着之后,它会加载我的主Activity的第二个实例.但是只有在应用程序已经运行一次之后,并且通过从主Activity中按BACK退出.它会在以后强制退出应用程序或从IDE加载新版本.
基于此,我怀疑某种Activity实例正在四处闲置并被重用,因为它只发生在我运行应用程序的第二个+时间(并使用BACK退出 - 使用HOME只返回到应用程序的最后状态,没什么大不了).任何人都有任何想法?
我正在寻找一种方法来告诉Spring在基于注释的bean上应该调用哪个方法来调用该bean.
我实际想要实现的是,当会话范围的bean被销毁时被通知以便从该会话中持久存储一些东西.
lifecycle ×10
android ×5
annotations ×1
double ×1
eclipse-cdt ×1
end-of-life ×1
fragment ×1
innovation ×1
integration ×1
javascript ×1
jsf ×1
jsf-2 ×1
maven ×1
mingw ×1
node.js ×1
oncreate ×1
product ×1
react-native ×1
reactjs ×1
save ×1
screen ×1
spring ×1