onStop(),onPause(),onCreate(),onResume()和GPS

All*_*rds 2 gps android

我有一个GPS基于的应用程序工作.它有许多活动,都使用GPS.例如,一个活动显示到某个位置的距离,另一个显示速度和方向.我成立了,并呼吁requestLocationUpdates()onCreate()和通话removeUpdates()onPause().

这一切都有效但GPS眨眼并且在切换活动时必须重新获得.我做了一个测试,如果我把它removeUpdates()放入onStop()而不是在onPause()那里没有眨眼.显然onStop()是在新活动开始后调用,这解释了缺少闪烁.

我已阅读有关此主题的帖子,似乎存在意见分歧.但是,看起来我应该使用onStop(),我想知道是否有任何理由我不应该这样做.

第二个问题是没有onResume()代码,因此GPS在后退箭头或关闭和打开屏幕后没有代码.我应该解决这个问题.现在我的onCreate()代码创建了位置管理器,基本上我的所有代码都在其中.它看起来像遵循生命周期流程图,我应该移动removeUpdates()到onStop并将lm和ll的创建移动到onStart().它是否正确?

这是我的onCreate()代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.set);
    textView1 = (TextView)findViewById(R.id.textView1);
    lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    ll = new mylocationlistener();
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
}
Run Code Online (Sandbox Code Playgroud)

这是我的onPause代码:

    @Override
    protected void onPause() {
        super.onPause();
        if(lm != null) {
            lm.removeUpdates(ll);
        }
        ll = null;
        lm = null;
    }
Run Code Online (Sandbox Code Playgroud)

所以我想我应该将onPause()更改为onStop()并将onStart()更改为:

@Override
public void onStart() {
    super.onStart();
    lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    ll = new mylocationlistener();
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
}
Run Code Online (Sandbox Code Playgroud)

我的onCreate代码就是这样;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.set);
    textView1 = (TextView)findViewById(R.id.textView1);
  }
Run Code Online (Sandbox Code Playgroud)

这就是说,我对这一切都不熟悉,这是我的第一个申请,所以我想知道我在这里缺少什么.

Nic*_*ckT 7

我已经做了类似于你的应用程序的事情,除了我已经将GPS功能委托给一项服务,该服务在没有任何活动绑定时停止GPS,并在活动绑定到它时启动它.我绑定到onStarts中的服务并在onStops中取消绑定.切换活动时记录on ..方法给出如下序列:

FIRST Activity onCreate
FIRST Activity onStart
FIRST Activity onResume
FIRST Activity onPause
SECOND Activity onCreate
SECOND Activity onStart
SECOND Activity onResume
FIRST Activity onStop
Run Code Online (Sandbox Code Playgroud)

如果通过服务完成它,以便我只有一个LocationManager来控制,你可以采用相同的方法,或onStarts()中的requestUpdates,并在onStops()中删除它们