【问题标题】:Background Location Update issue When I minimized my app后台位置更新问题当我最小化我的应用程序时
【发布时间】:2017-12-04 21:23:40
【问题描述】:

当我最小化我的应用程序后台位置时,它打开时不会更新。

在几分钟后更新位置时,应用重新启动。

public  void onLocationChanged(Location location) {

    ArrayList<Activity> activities = new ArrayList<Activity>();

    activities.add(StartTravel.StartTravelActivity);

    boolean isAppRunning = false;
    for (Activity activity : activities) {
        if (activity != null)
            isAppRunning = true;
    }
    if (isAppRunning) {
        startLocationUpdates();
    }
    if (!isAppRunning) {
        startLocationUpdates();
    }
    curLat = location.getLatitude();
    curLng = location.getLongitude();
    curLat1 = location.getLatitude();
    curLng1 = location.getLongitude();

    if (curLat != 0.0 && curLng != 0.0) {
        callWebservice();
    }
    Log.e("IN","Track Location :: " + curLat + curLng);
//  boolean isInserted1 = myDb.INSERT(String.format("%.6f",location.getLatitude()),String.format("%.6f",location.getLongitude()));
}

【问题讨论】:

  • 你使用广播接收器了吗?
  • 几乎所有这些代码都可以省略。 if(StartTravel.StartTravelActivity != null) startLocationUpdates(); curLat = location.getLatitude(); curLng = location.getLongitude(); if(curLat != 0f && curLng != 0f) callWebService();只是一个观察。
  • 不,我没有使用广播接收器 - Waleed Asim

标签: android


【解决方案1】:

尝试将您的代码放入 onPause()。

【讨论】:

    【解决方案2】:

    您需要将位置更新代码移动到Service。 Activity 不适用于在后台执行长时间运行的操作。

    此外,当您使用以下代码在代码中创建新对象时会出现问题:

    public  void onLocationChanged(Location location) {
      ArrayList<Activity> activities = new ArrayList<Activity>();
      activities.add(StartTravel.StartTravelActivity);
    }
    

    对于 Android,创建对象的成本很高。每次位置更改时,您都试图分配一个新对象。 garbage collector 尚未回收您创建的对象使用的内存。所以,它会得到Out Of Memory 错误然后被系统杀死。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      相关资源
      最近更新 更多