Activity 的生命周期是啥?
Posted
技术标签:
【中文标题】Activity 的生命周期是啥?【英文标题】:What is the lifecycle of an Activity?Activity 的生命周期是什么? 【发布时间】:2012-09-23 15:06:46 【问题描述】:我不太清楚该程序如何在 android 中运行。过去两个月我开始在 Android 上工作,而且我还是 Java 的初学者。所以,我正在尽我所能去发展和学习。这是我实现的一段代码,我不太清楚它是如何按照我的要求工作的。
activity
onCreate()
/* here i am using google maps api and trying to plot the current location*/
OverlayItem overlayItem1 = new OverlayItem(ourLocation,"Our Location","Position");
CustomPinpoint custom1 = new CustomPinpoint(d, Activity.this);
custom1.insertPinpoint(overlayItem1);
overlayList.add(custom1);
controller.animateTo(ourLocation);
private class TouchOverlay extends com.google.android.maps.Overlay
public boolean onTouchEvent(MotionEvent event, MapView map)
onZoom();
public boolean onCreateOptionsMenu(Menu menu)
public boolean onOptionsItemSelected(MenuItem item)
case.X:
getGPSPoints();//Here i will be getting some gps points from stored database
// and I would like to plot them all on the map.
TouchOverlay touchOverlay = new TouchOverlay();
overlayList.add(touchOverlay);
onPause()
super.onPause();
lm.removeUpdates(this);
onResume()
super.onResume();
lm.requestLocationUpdates(towers, 500, (float) 0.5, this);
onLocationChanged(Location l)
// TODO Auto-generated method stub
clearmap();
lat = (int) (l.getLatitude()*1E6);
longi = (int) (l.getLongitude()*1E6);
GeoPoint ourLocation = new GeoPoint(lat, longi);
CustomPinpoint custom = new CustomPinpoint(d, TrafficMapActivity.this);
OverlayItem overlayItem = new OverlayItem(ourLocation,"Our location","Position");
custom.insertPinpoint(overlayItem);
overlayList.add(custom);
我的问题是什么时候会调用onLocationChanged
方法以及 onTouchEvent 方法?
我创建了一个getGPSPoints()
的方法,我想在地图上绘制获得的点。我的意图是它像谷歌地图交通层。当我们拖动屏幕或放大/缩小时,我应该连续绘图。为此,我在TouchOverlay
类中的onZoom()
方法中使用了相同的getGPSPoints
方法。
但是当我第一次选择选项和第一次放大/缩小操作时,它只是绘制一次。如果我需要绘制剩余的部分,我必须根据当前的实现再次单击该选项。这项活动如何运作,我应该拥有它?
【问题讨论】:
Activity Life Cycle 【参考方案1】:只要 Android 操作系统必须“创建”您的 Activity,就会调用您的 onCreate
方法。
这将发生在您的 Activity 的初始加载时,以及操作系统自愿销毁您的 Activity 或您调用 Activity 的 finish()
方法时。
onCreate
方法之后是另一个名为 onStart
的 Activity 方法。
这将在 Activity 现在对用户可见时被调用。
关于onLocationChanged
和onTouchEvent
的实现,这两种类型的方法是由设置为对象的监听器执行的。
例如,onLocationChanged
将在您的地图侦听器每次确定位置已更改时执行。
onTouchEvent
将在您的视图收到来自用户的触摸事件时执行。
您的onPause
和onResume
方法是Activity 类的一部分,这些方法类似于onCreate
,尽管它们在不同的时间被调用。
具体来说,只要您的 Activity 不是前面的焦点视图,就会调用 onPause
。
onResume
方法与 onPause
相反 - 当您的 Activity 的视图现在是屏幕上的焦点视图时,它将被调用。
http://developer.android.com/training/basics/activity-lifecycle/pausing.html
【讨论】:
好的。你的意思是 onCreate 只会在应用启动时运行一次? 不,如果你调用了 finish() 方法或者视图没有处于焦点并且 VM 销毁它以获得更多内存,它也可能会被调用。 与我创建的 TouchOverlay 类有关,你能解释一下它的生命周期吗?我需要覆盖各种触摸事件的所有数据。 由于您的 TouchOverlay 类是 Activity 类中的内部类,因此它将遵循与您的 Activity 相同的生命周期(即,您的 Activity 被销毁,其内部和嵌套类也是如此) 但是当我尝试运行我的活动时,TouchOverlay 被识别但没有调用缩放方法。我不明白为什么它没有运行。【参考方案2】:全部都在下图中(可在开发网站及其他地方找到):
【讨论】:
嘿巴拉克,你能解释一下我的背景吗?以上是关于Activity 的生命周期是啥?的主要内容,如果未能解决你的问题,请参考以下文章