首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >屏幕断断续续时对生命周期的理解问题

屏幕断断续续时对生命周期的理解问题
EN

Stack Overflow用户
提问于 2010-08-04 23:37:36
回答 4查看 17.4K关注 0票数 21

信息:我的设备是带有2.2的Nexus One,我已经测试了两个项目,一个在1.5上,另一个在2.1上。

问题:当屏幕关闭和打开时,我无法理解应用程序的生命周期。

这是我的输出

代码语言:javascript
运行
复制
// 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: ERROR/PlayActivity(6215): onStop executes ...
08-04 17:24:59.663: ERROR/PlayActivity(6215): onDestroy executes ...
08-04 17:25:00.943: ERROR/PlayActivity(6215): onStart executes ...
08-04 17:25:00.943: ERROR/PlayActivity(6215): onResume executes ...

我完全糊涂了。为什么要在屏幕关闭时重新启动活动?当屏幕已经打开并且只有锁被移除时,为什么要停止并重新启动它呢?

为了确保我没有做错任何事情,我创建了一个仅包含此活动的新项目。输出是相同的.

代码语言:javascript
运行
复制
public class LifeCycleTest extends Activity {

    private final static String DEBUG_TAG = "FirstLifeLog";

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e(DEBUG_TAG, "onCreate executes ...");
        setContentView(R.layout.main);
    }

    protected void onRestart() {
        super.onRestart();
        Log.e(DEBUG_TAG, "onRestart executes ...");
    }

    protected void onStart() {
        super.onStart();
        Log.e(DEBUG_TAG, "onStart executes ...");
    }

    protected void onResume() {
        super.onResume();
        Log.e(DEBUG_TAG, "onResume executes ...");
    }

    protected void onPause() {
        super.onPause();
        Log.e(DEBUG_TAG, "onPause executes ...");
    }

    protected void onStop() {
        super.onStop();
        Log.e(DEBUG_TAG, "onStop executes ...");
    }

    protected void onDestroy() {
        super.onDestroy();
        Log.e(DEBUG_TAG, "onDestroy executes ...");
    }
}

有没有人有主意?

从今天开始更新(不明白为什么它的行为不像上次,可能是更多的免费资源?)

代码语言:javascript
运行
复制
// activity starts
08-09 12:14:03.122: ERROR/FirstLifeLog(15406): onCreate executes ...
08-09 12:14:03.132: ERROR/FirstLifeLog(15406): onStart executes ...
08-09 12:14:03.132: ERROR/FirstLifeLog(15406): onResume executes ...
// screen off
08-09 12:14:07.412: ERROR/FirstLifeLog(15406): onPause executes ...
// screen on
08-09 12:14:11.722: ERROR/FirstLifeLog(15406): onResume executes ...
// no log for removed screen lock
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-04 23:45:06

有关生命周期的详细描述和图表,请参阅Activity Lifecycle文档。

最有可能的是,为了节省资源(电池电量),你的活动会随着屏幕关闭而终止。正如文档所述,当Android想要释放资源时,基本上你可能会被杀死。因此,您应该始终将您的活动设计为能够在任何时候停止和重新启动。

票数 -2
EN

Stack Overflow用户

发布于 2010-11-15 02:51:31

我自己的游戏也有同样的问题。我的游戏只能在风景模式下运行,当关闭屏幕时,android屏幕保护程序会控制(在纵向模式下),从而发送一个销毁并重新创建活动的orientationChange。

一个简单的解决方案是声明您将管理自己的屏幕方向更改:

代码语言:javascript
运行
复制
<activity ... android:configChanges="orientation" ... >

如果您的活动被声明为仅限于景观(您不必做任何事情),这将非常容易,但如果您的活动可以轮换,则会变得更加困难……

票数 31
EN

Stack Overflow用户

发布于 2015-06-26 19:57:21

是完全正确的,但前提是您的应用程序的目标是API12或更低的

但是由于API级别13除了orientation选项之外,您还必须声明screenSize选项,因为当设备在纵向和横向之间切换时,它也会被触发:

代码语言:javascript
运行
复制
<activity ... android:configChanges="orientation|screenSize" ... >

否则,当API 13或更高平台上的屏幕关闭时,您的活动仍将重新创建一段额外的时间。

有关参考,请参见API docsandroid:configChanges部分的注释。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3407192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档