2011-05-20 29 views
9

Quiero probar el rendimiento de mi aplicación. Lo comencé con una aplicación simple e intento poner traceview pero de repente falla en mi teléfono Android con fuerza para cerrar. Por favor, guíame cómo puedo configurar mi código para la aplicación de Android simple para obtener manos sucias con vista Traceno se puede abrir archivo de seguimiento

Aquí está el código paquete test.check;

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Debug; 

public class tracev extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Debug.startMethodTracing("traceview"); 
     setContentView(R.layout.main); 
    } 
    @Override 
    protected void onStop() { 
     Debug.stopMethodTracing(); 
     super.onStop(); 
    } 
} 

Aquí está el archivo de manifiesto

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="test.check" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="4" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".tracev" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest> 

También he añadido

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

pero no su trabajo. Creo que es porque de esta línea en el Logcat pero no estoy seguro de cómo tratar con él

05-20 23:39:43.913: ERROR/dalvikvm(11673): Unable to open trace file '/sdcard/traceview.trace': Permission denied 

Logcat

05-20 23:39:43.903: DEBUG/dalvikvm(11673): +++ active profiler count now 1 
05-20 23:39:43.913: INFO/dalvikvm(11673): TRACE STARTED: '/sdcard/traceview.trace' 8192KB 
05-20 23:39:43.913: ERROR/dalvikvm(11673): Unable to open trace file '/sdcard/traceview.trace': Permission denied 
05-20 23:39:43.913: DEBUG/dalvikvm(11673): +++ active profiler count now 0 
05-20 23:39:43.913: DEBUG/AndroidRuntime(11673): Shutting down VM 
05-20 23:39:43.913: WARN/dalvikvm(11673): threadid=3: thread exiting with uncaught exception (group=0x4001e390) 
05-20 23:39:43.913: ERROR/AndroidRuntime(11673): Uncaught handler: thread main exiting due to uncaught exception 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673): java.lang.RuntimeException: Unable to start activity ComponentInfo{test.check/test.check.tracev}: java.lang.RuntimeException: file open failed 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.access$2200(ActivityThread.java:126) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.os.Looper.loop(Looper.java:123) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.main(ActivityThread.java:4595) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at dalvik.system.NativeStart.main(Native Method) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673): Caused by: java.lang.RuntimeException: file open failed 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at dalvik.system.VMDebug.startMethodTracing(Native Method) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at dalvik.system.VMDebug.startMethodTracing(VMDebug.java:156) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.os.Debug.startMethodTracing(Debug.java:443) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.os.Debug.startMethodTracing(Debug.java:391) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at test.check.tracev.onCreate(tracev.java:12) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) 
05-20 23:39:43.983: ERROR/AndroidRuntime(11673):  ... 11 more 
05-20 23:39:44.013: INFO/Process(94): Sending signal. PID: 11673 SIG: 3 
05-20 23:39:44.013: INFO/dalvikvm(11673): threadid=7: reacting to signal 3 
05-20 23:39:44.023: INFO/dalvikvm(11673): Wrote stack trace to '/data/anr/traces.txt' 
05-20 23:39:51.213: DEBUG/KeyguardViewMediator(94): pokeWakelock(15000) 
05-20 23:39:51.213: INFO/HtcLockScreen(94): Press Menu key to unlock screen 

Me pregunto sobre un punto no hay nada en la sdcard y delante de eso no hay ningún dispositivo seleccionado. Puede ser la causa del error, aquí está la imagen enter image description here

+0

¿Puede mostrarnos su manifiesto? – MByD

+0

¿Qué versión de Android estás usando? y estas usando el emulador? si es así, ¿creaste una tarjeta SD virtual para ello? –

+0

@ MByD He agregado el archivo de manifiesto – user667340

Respuesta

7

Si se trata de un emulador, asegúrese de que el emulador tenga una tarjeta SD conectada.

Además, la mejor práctica es usar getExternalStorageDirectory().

Intenta poner la línea de permisos justo debajo de la línea uses-sdk.

Utilice un nombre de archivo diferente al traceview para asegurarse de que ninguna otra aplicación tenga bloqueado.

su tarjeta SD parece que está vacío. ¿Has podido acceder antes? Puede estar corrupto.

+0

estoy corriendo directamente en mi teléfono Android – user667340

+0

Editado con otra sugerencia. – Haphazard

+0

intentado "Intente poner la línea de permisos justo debajo de la línea uses-sdk" pero no funciona :( – user667340

2

En el Administrador de dispositivos virtuales de Android, selecciona y edita tu emulador. dar un poco de valor de la opción de tarjeta SD en:

Tamaño: 100 MB

Esto debería funcionar para usted

0

he tenido este problema durante la depuración en el dispositivo físico y encontré esta pregunta. Me fijo por:

  1. entrar en el Opciones de desarrollo de ajuste en el teléfono (cómo habilitar: How to find and turn on USB debugging mode on Nexus 4)
  2. clic en el elemento Select aplicación de depuración.
  3. Seleccione su aplicación en la lista.
6

Usando TraceView requiere permisos: 2

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
+0

Dado que el almacenamiento SD está habilitado de manera predeterminada con el nuevo Android Studion, esto solucionó el problema – MonoThreaded

11

En malvavisco (Android a la versión 6, API nivel 23) sólo tener el permiso de "escritura" en el manifiesto no es suficiente.Debe solicitarlo permission at runtime, o puede ir a las preferencias del sistema y otorgar el permiso de almacenamiento a su aplicación.

+0

. Este fue mi problema, encontré mi aplicación en la lista de aplicaciones y habilité los permisos de almacenamiento en mi dispositivo. – ripple182

0

Ninguna de estas respuestas solucionó mi problema. Me acabar tener que

  1. Raíz mi teléfono
  2. Cambiar la llamada a

    Debug.startMethodTracing ("/ data/local/arranque");

donde toco el archivo antes de carrera y chmod a 777.

1

La solución más fácil que he encontrado es utilizar Context.getFileDir() como lugar de almacenamiento. Esto tiene las siguientes ventajas sobre Context.getExternalFilesDir():

  • también funciona cuando no hay tarjeta SD (en el dispositivo o emulador)
  • que no necesita ningún permiso adicional

Ejemplo de código para empezar método de rastreo:

final File methodTracingFile = new File(getFilesDir(), "AppStart.trace"); 
Log.d(TAG, "methodTracingPath=" + methodTracingFile.getPath()); 
Debug.startMethodTracing(methodTracingFile.getPath()); 

Nota: es una buena idea para registrar el methodTracingPath para ver donde se almacenará el archivo.
Ejemplo: /data/data/com.YOUR_PACKAGE.debug/files/AppStart.trace

Para copiar el archivo desde el emulador en su PC, puede utilizar el Explorador de Archivo en el Monitor de dispositivos Android (ver Working with an emulator or device's file system) enter image description here

  1. seleccione la traza archivo
  2. haga clic en Extraiga un archivo del dispositivo botón para copiarlo en su PC local

Finalmente, puede arrastrar & soltar el archivo de seguimiento a Android Studio para ver el method trace-view.

Cuestiones relacionadas