2016-05-29 78 views
0

我不知道/了解有关Android回调方法及其实现的内容。Android回调方法:什么时候?怎么样?从wheech Thread?

我有一个简单的活动与实现的回调,如:

@Override 
onResume() { 
    Log.i(TAG, "onPause()"); 
} 

@Override 
onDestroy() { 
    Log.i(TAG, "onDestroy()"); 
} 

onButtonPressed() { 
    while(true) { 
     Log.i(TAG, "onButtonPressed()"); 
     SystemClock.sleep(1000); 
    } 
} 

当我开始我的应用程序,改变屏幕的方向,我可以看到的onPause()和的onDestroy()日志控制台。但是,当我按测试按钮(onButtonPressed())和一个持久的过程开始(而为true)时,我只能在控制台上看到onButtonPressed()日志。我可以旋转我的手机,并且根据方向查看该活动已转向,但未调用onDestroy()和onPause()(未在控制台中登录)回调。

是我的活动仍然方向变化时重现?为什么回调没有被调用?他们是否需要其他线程?

任何人都可以澄清这对我来说情况,并解释了Android的究竟如何执行将回调方法的调用?

测试上AndroidN。

谢谢。

更新: 看起来这是我的错误。 当我旋转手机时,我看到屏幕正在旋转,但并没有理解活动不是......它只是放在屏幕的一侧(试图找到它是Android N上的开发人员预览错误)。这让我感到困惑:d

enter image description here

感谢答案和帮助。

回答

3

除非文档所有方法调用和回调主线程(UI线程)上通常处理另有规定。

这适用于您的示例中的所有生命周期方法,例如onResume()onDestroy()以及UI回调,例如onButtonPressed()

在你进入无限while循环,你完全占用UI线程所以没有生命周期的方法可以运行了,并且用户可以与应用程序不再进行交互的第二个例子。这就是为什么当你旋转设备时,你看不到正在打印的日志语句。目前的Activity从未销毁,并且无法创建新的Activity,因为您有无限循环负责这样做的线程。

这也是为什么Android文档建议将所有长期运行操作关闭UI线程,这样你就不会产生负面的用户体验产生不良影响。

相关问题