Es SharedPreferences tiempo de acceso?
Actualmente estoy intentando probar un servicio de terceros para mi aplicación, y necesito identificar cada prueba que se está haciendo en cada ejecución específica.
Dado que más de una prueba puede tener lugar cada vez que ejecuto el testApp, necesito identificar cada prueba.
- Cómo capturar clave de retroceso clave en el navegador Android - javascript?
- ¿Gradle escala de rendimiento bien con el número de núcleos de la CPU
- Android TextureView / Dibujo / Rendimiento de la pintura
- Java - ¿Tendrá beneficios el código inlining?
- Cómo deslizar imágenes en ViewFlipper o ViewPager
Lo que pensaba, es almacenar el nombre del dispositivo y construir (no muchos dispositivos aquí), y un índice para cada prueba.
private String getTestId(){ SharedPreferences settings = getPreferences(0); SharedPreferences.Editor editor = settings.edit(); int testNumber = settings.getInt("id", 0); editor.putInt("id", testNumber+1); editor.commit(); String id = Build.DEVICE + Build.VERSION.RELEASE+" - test number: "+testNumber; return id; }
¿Está ejecutando esta función cada vez que ejecuto una prueba de tiempo de consumo, o puedo hacerlo sin temor a la costa?
Si la respuesta es "tiempo", ¿qué sugeriría que haga cada vez que ejecuto una prueba con el fin de diferenciar cada prueba?
- Google Maps Android API v2 bloquea el subproceso de la interfaz de usuario
- Eficiencia de Android: vistas
- Rendimiento de Android NDK sobre el código Java habitual
- HttpUrlConnection de Android: Publicar Multipart
- Problema de bajo rendimiento de Phonegap
- Parse ~ 1 MB JSON en Android muy lento
- ¿Cuál es la mejor solución para un salto de barra de progreso indeterminado en ICS?
- Utilizando el SDK de Android en un Mac, Eclipse es muy lento. ¿Cómo puedo acelerarlo?
Acerca de SharedPreferences
.
SharedPreferences almacena en caché después de la primera carga, por lo que el acceso al disco para cargar datos tomará tiempo, pero una vez. Puedes intentar cargar SharedPreferences desde el principio de tu suite de pruebas para evitar esta penalización.
Para persistir sus datos debe optar por SharedPreferences.Editor.apply () en lugar de SharedPreferences.Editor.commit () ya que appy es asíncrono. Pero por favor lea la documentación sobre ambos para ver cuál se aplica en su caso.
La pregunta ya tiene una respuesta, pero en caso de que otros vengan y busquen un código de ejemplo, reuní esta clase de utilidad para interactuar con SharedPreferences.
Llamar commit () utilizará el método apply () si está disponible, de lo contrario volverá a commit () en los dispositivos más antiguos:
public class PreferencesUtil { SharedPreferences prefs; SharedPreferences.Editor prefsEditor; private Context mAppContext; private static PreferencesUtil sInstance; private boolean mUseApply; //Set to private private PreferencesUtil(Context context) { mAppContext = context.getApplicationContext(); prefs = PreferenceManager.getDefaultSharedPreferences(mAppContext); prefsEditor = prefs.edit(); //Indicator whether or not the apply() method is available in the current API Version mUseApply = Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD; } public static PreferencesUtil getInstance(Context context) { if (sInstance == null) { sInstance = new PreferencesUtil(context); } return sInstance; } public boolean getBoolean(String key, boolean defValue) { return prefs.getBoolean(key, defValue); } public int getInt(String key, int defValue) { return prefs.getInt(key, defValue); } public String getString(String key, String defValue) { return prefs.getString(key, defValue); } public String getString(String key) { return prefs.getString(key, ""); } public void putBoolean(String key, boolean value) { prefsEditor.putBoolean(key, value); } public void putInt(String key, int value) { prefsEditor.putInt(key, value); } public void putString(String key, String value) { prefsEditor.putString(key, value); } /** * Sincle API Level 9, apply() has been provided for asynchronous operations. * If not available, fallback to the synchronous commit() */ public void commit() { if (mUseApply) //Since API Level 9, apply() is provided for asynchronous operations prefsEditor.apply(); else //Fallback to syncrhonous if not available prefsEditor.commit(); } }
He notado que cuando se utilizan métodos como putInt()
la primera vez para una clave específica que puede tomar una cantidad significativa de tiempo. Además, debe ser equivalente a cualquier otra forma de escribir en un archivo.
- ¿Hay alguna manera de saber si se muestra el teclado virtual?
- ¿Cómo incluir un .so lib en el proyecto Intellij IDEA for Android?