Files
frameworks_base/location/java/android/location/GpsSatellite.java
destradaa 6bde4683ae Reduce memory usage of GpsStatus objects.
A simple GpsStatus object uses 9K of space, given that it initializes an array
of 255 GpsSatellite objects.
This change reduces the memory footprint in the average case, and keeps the
semantics of the API and its GpsSatellite sibling objects without any changes.
In a best case scenario it brings the memory usage per object to 1K.
It's likely in most cases that only 20-50 satellites will be in view. So the
usage should not exceeed half of the original memory usage.
It was considered to keep the internal array but a SparseArray provided bigger
memory savings in the test scenario of ~700B.

Change-Id: Ie2d2144d776a74d4904a08c0d6c5aec6d3bba7cc
2015-02-03 13:17:14 -08:00

122 lines
3.2 KiB
Java

/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.location;
/**
* This class represents the current state of a GPS satellite.
* This class is used in conjunction with the {@link GpsStatus} class.
*/
public final class GpsSatellite {
/* These package private values are modified by the GpsStatus class */
boolean mValid;
boolean mHasEphemeris;
boolean mHasAlmanac;
boolean mUsedInFix;
int mPrn;
float mSnr;
float mElevation;
float mAzimuth;
GpsSatellite(int prn) {
mPrn = prn;
}
/**
* Used by {@link LocationManager#getGpsStatus} to copy LocationManager's
* cached GpsStatus instance to the client's copy.
*/
void setStatus(GpsSatellite satellite) {
if (satellite == null) {
mValid = false;
} else {
mValid = satellite.mValid;
mHasEphemeris = satellite.mHasEphemeris;
mHasAlmanac = satellite.mHasAlmanac;
mUsedInFix = satellite.mUsedInFix;
mSnr = satellite.mSnr;
mElevation = satellite.mElevation;
mAzimuth = satellite.mAzimuth;
}
}
/**
* Returns the PRN (pseudo-random number) for the satellite.
*
* @return PRN number
*/
public int getPrn() {
return mPrn;
}
/**
* Returns the signal to noise ratio for the satellite.
*
* @return the signal to noise ratio
*/
public float getSnr() {
return mSnr;
}
/**
* Returns the elevation of the satellite in degrees.
* The elevation can vary between 0 and 90.
*
* @return the elevation in degrees
*/
public float getElevation() {
return mElevation;
}
/**
* Returns the azimuth of the satellite in degrees.
* The azimuth can vary between 0 and 360.
*
* @return the azimuth in degrees
*/
public float getAzimuth() {
return mAzimuth;
}
/**
* Returns true if the GPS engine has ephemeris data for the satellite.
*
* @return true if the satellite has ephemeris data
*/
public boolean hasEphemeris() {
return mHasEphemeris;
}
/**
* Returns true if the GPS engine has almanac data for the satellite.
*
* @return true if the satellite has almanac data
*/
public boolean hasAlmanac() {
return mHasAlmanac;
}
/**
* Returns true if the satellite was used by the GPS engine when
* calculating the most recent GPS fix.
*
* @return true if the satellite was used to compute the most recent fix.
*/
public boolean usedInFix() {
return mUsedInFix;
}
}