2012-03-01 1 views
0

Dans un appwidget que je développe j'ai un problème que lorsque je démarre une activité de carte dans Android 2.1 et 1.5, il provoque un plantage. J'ai seulement noté ceci dans 1.5 et 2.1, cela peut arriver dans 1.6 mais je n'ai pas encore testé. Le problème disparaît comme par magie si je laisse l'application fonctionner pendant un moment, disons 30 minutes à une heure avant de le toucher. Je suis assez convaincu que ce n'est pas un bug dans mon application, mais un bug Android. Y a-t-il un moyen de contourner ce problème?Démarrer l'activité de la carte dans Android 2.1 et 1.5 provoque une panne

Trace de la pile:

 
I/ActivityManager( 576): Starting activity: Intent { flags=0x10000000 comp={net.example.example/net.example.example.ExampleTabWidget} } 
D/dalvikvm( 576): GC freed 8147 objects/444432 bytes in 84ms 
W/dalvikvm( 822): Unable to resolve superclass of Lnet/example/example/ExampleMaps; (55) 
W/dalvikvm( 822): Link of class 'Lnet/example/example/ExampleMaps;' failed 
E/dalvikvm( 822): Could not find class 'net.example.example.ExampleMaps', referenced from method net.example.example.ExampleTabWidget.onCreate 
W/dalvikvm( 822): VFY: unable to resolve const-class 109 (Lnet/example/example/ExampleMaps;) in Lnet/example/example/ExampleTabWidget; 
W/dalvikvm( 822): VFY: rejecting opcode 0x1c at 0x011c 
W/dalvikvm( 822): VFY: rejected Lnet/example/example/ExampleTabWidget;.onCreate (Landroid/os/Bundle;)V 
W/dalvikvm( 822): Verifier rejected class Lnet/example/example/ExampleTabWidget; 
W/dalvikvm( 822): Class init failed in newInstance call (Lnet/example/example/ExampleTabWidget;) 
D/AndroidRuntime( 822): Shutting down VM 
W/dalvikvm( 822): threadid=3: thread exiting with uncaught exception (group=0x4000fe70) 
E/AndroidRuntime( 822): Uncaught handler: thread main exiting due to uncaught exception 
E/AndroidRuntime( 822): java.lang.VerifyError: net.example.example.ExampleTabWidget 
E/AndroidRuntime( 822): at java.lang.Class.newInstanceImpl(Native Method) 
E/AndroidRuntime( 822): at java.lang.Class.newInstance(Class.java:1472) 
E/AndroidRuntime( 822): at android.app.Instrumentation.newActivity(Instrumentation.java:1097) 
E/AndroidRuntime( 822): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2186) 
E/AndroidRuntime( 822): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) 
E/AndroidRuntime( 822): at android.app.ActivityThread.access$1800(ActivityThread.java:112) 
E/AndroidRuntime( 822): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) 
E/AndroidRuntime( 822): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime( 822): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime( 822): at android.app.ActivityThread.main(ActivityThread.java:3948) 
E/AndroidRuntime( 822): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime( 822): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime( 822): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
E/AndroidRuntime( 822): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
E/AndroidRuntime( 822): at dalvik.system.NativeStart.main(Native Method) 
I/Process ( 576): Sending signal. PID: 822 SIG: 3 
I/dalvikvm( 822): threadid=7: reacting to signal 3 
I/dalvikvm( 822): Wrote stack trace to '/data/anr/traces.txt' 
I/Process ( 822): Sending signal. PID: 822 SIG: 9 
I/ActivityManager( 576): Process net.example.example (pid 822) has died. 

Code pertinent, début de l'activité carte de l'activité de l'onglet:

intent=new Intent().setClass(this, ExampleMaps.class); 
intent.putExtra("t1",t1); 
intent.putExtra("t2",t2); 
intent.putExtra("m1",m1); 
intent.putExtra("details",details); 
spec=tabHost.newTabSpec("Examples").setIndicator("", res.getDrawable(R.drawable.example_tab_icons_map)).setContent(intent); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
tabHost.addTab(spec); 
(..) 
tabHost.setCurrentTab(0); 

L'activité de carte:

public class ExampleMaps extends MapActivity 
{ 
    private MapController mapController; 
    private MapView mapView; 
    private LocationManager locationManager; 

    @Override 
    protected boolean isRouteDisplayed() 
    { 
    return false; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 

    double t1=0, t2=0; 
    String alerttext=ExampleWidgetProvider.NODATA, mag, details=ExampleWidgetProvider.NODATA; 
    int m1=1; 
    Drawable drawable; 

    Bundle extras=getIntent().getExtras(); 
    if(extras !=null) 
    { 
(..) 

afetr vérification Android java.lang.VerifyError? et d'autres endroits I n'ont pas encore trouvé de solution.

déjà Les éléments suivants ont été mis correctement:

project.properties

target=Google Inc.:Google APIs:3 

Manifest, dans "Applications":

<application 
    android:label="@string/app_name" 
    android:icon="@drawable/scaled48"> 
    <uses-library android:name="com.google.android.maps"/> 
(...) 
</application> 
<uses-sdk android:minSdkVersion="3" /> 

y compris ceux de l'activité carte:

import com.google.android.maps.Overlay; 
import com.google.android.maps.OverlayItem; 
import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 

Répondre

1

Le fichier java.lang.VerifyError semble suspect. Vous souhaiterez peut-être désinstaller, reconstruire, réinstaller et vous assurer que vous compilez correctement les bibliothèques. Regardez here pour des informations relatives à la

+0

Merci Je vais regarder dans ce domaine, mais juste aujourd'hui j'ai fait une mise à jour de tous les outils SDK et connexes en utilisant le gestionnaire Android SDK et j'ai fait une construction propre. Cela fonctionne également sur toutes les autres versions d'Android que j'ai essayées. – aseq

+0

Voir la question mise à jour. Pas plus proche d'une solution pour le moment. S'il vous plaît noter que ce problème disparaît si après le démarrage, je ne touche pas du tout le widget pendant 30 minutes ou une heure. – aseq

Questions connexes