2016-02-07 10 views
6

Ich versuche, eine Lade-Animation auf meinem Ladebildschirm zu spielen, und ich las irgendwo, dass Android Gifs nicht unterstützt, also entweder Sie müssen bilde Frames ein und spiele sie ab oder wir können die Movie-Klasse verwenden.Android Fatal Signal 11 (SIGSEGV), Code 1, Fehler addr 0x0 in tid 29092

Heres die führende Aktivität -

package com.myapp.mehul.login.activity; 

import android.app.Activity; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AlertDialog; 
import android.util.Log; 

import com.myapp.mehul.login.MYGIFView; 
import com.myapp.mehul.login.MainActivity; 
import com.myapp.mehul.login.R; 
import com.myapp.mehul.login.app.Constants; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.net.URISyntaxException; 

import io.socket.client.IO; 
import io.socket.client.Socket; 
import io.socket.emitter.Emitter; 


/** 
* Created by mehul on 2/6/16. 
*/ 
public class LoadingScreen extends Activity { 

    /** Duration of wait **/ 
    private final int SPLASH_DISPLAY_LENGTH = 1000; 

    /** Called when the activity is first created. */ 
    private Socket mSocket; 
    String you; 
    String opponentId; 
    String username; 

    { 
     try { 
      mSocket = IO.socket(Constants.CHAT_SERVER_URL); 
     } catch (URISyntaxException e) { 

      throw new RuntimeException(e); 
     } 
    } 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(new MYGIFView(getApplicationContext())); 
     //initialise the socket 
     mSocket.connect(); 
     //call add user 
     mSocket.emit("add user"); 
     //start a listener for opponent 
     mSocket.on("opponent", onOpponent); 
     //initialise the username 
     username = getIntent().getExtras().getString("username"); 
    } 

    private Emitter.Listener onOpponent = new Emitter.Listener(){ 
     @Override 
     public void call(final Object... args){ 
      LoadingScreen.this.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        JSONObject data = (JSONObject) args[0]; 

        try { 
         you = data.getString("you"); 
         opponentId = data.getString("opponent"); 
         Log.d("LoadingScreen", data.toString()); 


         //setResult(RESULT_OK, i); 


         finish(); 
        } catch (JSONException e) { 
         return; 
        } 
        Intent i = new Intent(LoadingScreen.this, MainActivity.class); 
        i.putExtra("opponentId", opponentId); 
        i.putExtra("you", you); 
        i.putExtra("username", username); 
        Log.d("goToChat", username); 
        startActivity(i); 
       } 
      }); 
     } 
    }; 

    @Override 
    public void onBackPressed(){ 

     AlertDialog.Builder builder = new AlertDialog.Builder(LoadingScreen.this); 
     builder.setMessage("I knew you didn't have BALLS.").setCancelable(
       false).setPositiveButton("I am a LOSER", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         //send the logout information to the server 
         JSONObject discon = new JSONObject(); 
         try { 
          discon.put("opponent", opponentId); 
          discon.put("you", you); 
         } catch (JSONException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         mSocket.emit("discon", discon); 
         mSocket.disconnect(); 

         //finish the current activity. 
         Intent intent = new Intent(LoadingScreen.this, MainMenu.class); 
         startActivity(intent); 
         LoadingScreen.this.finish(); 

        } 
       }).setNegativeButton("I'll fkin face it", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 

        } 
       }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 

} 

In dem obigen Code habe ich Inhaltsansicht festlegen, indem es eine Instanz von MYGIFView.class vorbei -

Heres MYGIFView.class

package com.myapp.mehul.login; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Movie; 
import android.view.View; 

import java.io.InputStream; 

/** 
* Created by mehul on 2/7/16. 
*/ 
public class MYGIFView extends View{ 
    Movie movie,movie1; 

    InputStream is=null,is1=null; 

    long moviestart; 
    public MYGIFView(Context context) { 
     super(context); 

     is=context.getResources().openRawResource(+ R.drawable.loading); 

     movie=Movie.decodeStream(is); 

    } 
    @Override 
    protected void onDraw(Canvas canvas) { 

     canvas.drawColor(Color.WHITE); 
     super.onDraw(canvas); 
     long now=android.os.SystemClock.uptimeMillis(); 
     System.out.println("now="+now); 
     if (moviestart == 0) { // first time 
      moviestart = now; 

     } 
     System.out.println("\tmoviestart="+moviestart); 
     int relTime = (int)((now - moviestart) % movie.duration()) ; 
     System.out.println("time="+relTime+"\treltime="+movie.duration()); 
     movie.setTime(relTime); 
     movie.draw(canvas,this.getWidth()/2-20,this.getHeight()/2-40); 
     this.invalidate(); 
    } 
} 

Die Ladeaktivität erstellt eine Instanz von MYGIFView.class und protokolliert die Daten, aber dann gibt es fatales Signal 11. Ich habe versucht zu suchen, aber ich habe keine Antwort erhalten.

Konsolenprotokoll -

02-07 12:22:30.321 29092-29092/? I/art: Late-enabling -Xcheck:jni 
02-07 12:22:30.341 29092-29102/? I/art: Debugger is no longer active 

02-07 12:22:30.422 29092-29092/? D/SQLiteHandler: Fetching user from Sqlite: {username=Harsh} 
02-07 12:22:30.422 29092-29092/? D/LoginActivity: already logged in 
02-07 12:22:30.425 29092-29092/? I/Timeline: Timeline: Activity_launch_request id:com.myapp.mehul.login time:71360781 
02-07 12:22:30.487 29092-29092/? D/MainMenu: painted again 
02-07 12:22:30.490 29092-29092/? D/SQLiteHandler: Fetching user from Sqlite: {username=Harsh} 
02-07 12:22:30.554 29092-29149/? D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 
02-07 12:22:30.559 29092-29092/? D/Atlas: Validating map... 
02-07 12:22:30.596 29092-29149/? I/Adreno-EGL: <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.01.00.042.030_msm8974_LA.BF.1.1.1_RB1__release_AU() 
               OpenGL ES Shader Compiler Version: E031.25.03.06 
               Build Date: 04/15/15 Wed 
               Local Branch: mybranch9068252 
               Remote Branch: quic/LA.BF.1.1.1_rb1.19 
               Local Patches: NONE 
               Reconstruct Branch: AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.01.00.042.030 + NOTHING 
02-07 12:22:30.597 29092-29149/? I/OpenGLRenderer: Initialized EGL, version 1.4 
02-07 12:22:30.611 29092-29149/? D/OpenGLRenderer: Enabling debug mode 0 
02-07 12:22:30.660 29092-29092/? I/Timeline: Timeline: Activity_idle id: [email protected] time:71361016 
02-07 12:22:31.898 29092-29092/com.myapp.mehul.login D/go to chat: was called 
02-07 12:22:31.899 29092-29092/com.myapp.mehul.login I/Timeline: Timeline: Activity_launch_request id:com.myapp.mehul.login time:71362255 
02-07 12:22:31.997 29092-29092/com.myapp.mehul.login I/System.out: now=71362353 
02-07 12:22:31.997 29092-29092/com.myapp.mehul.login I/System.out: moviestart=71362353 
02-07 12:22:31.997 29092-29092/com.myapp.mehul.login I/System.out: time=0 reltime=1850 
02-07 12:22:32.007 29092-29092/com.myapp.mehul.login A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 29092 (app.mehul.login) 
02-07 12:22:32.541 29092-29092/com.myapp.mehul.login W/app.mehul.login: type=1701 audit(0.0:302): auid=4294967295 uid=10250 gid=10250 ses=4294967295 subj=u:r:untrusted_app:s0 reason="memory violation" sig=11 
+0

Dies ist ein Speicherfehler. Möglicherweise ist in Ihrem Gerät ein Speicherleck oder Speicher vorhanden. –

+0

Also, wie repariere ich es? – hashcode55

+0

Diese Antwort könnte für Sie nützlich sein. Viel Glück! http://stackoverflow.com/questions/17840521/android-fatal-signal-11-sigsegv-at-0x636f7d89-code-1-how-can-it-be-tracked –

Antwort

13

ich eine Partie für diese Frage erhalten, was bedeutet, seine viel gesehen wird, also werde ich diese Frage beantworten Frage -

Was ich war unter der Leitung heraus den Fehler wirft -

movie.draw(canvas,this.getWidth()/2-20,this.getHeight()/2-40); 

Jetzt ist das Problem, dass dieser Fehler speziell durch viele Gründe verursacht werden kann, es ist nie ein bestimmter Grund .. der Grund, warum meine Arbeit nicht funktionierte, war, weil mein Gerät nicht gut mit Hardwarebeschleunigung funktioniert, also ich nur hatte es im Manifest Anwendung zu deaktivieren, so -

<android:hardwareAccelerated="false"> 

Nun ist es möglich, dass der Grund nicht das gleiche sein könnte .... aber der Kern Grund ist das gleiche, dessen Speicher bezogen, und die meisten Chancen Es ist ein Fehler in der Firmware des Geräts oder Emulators, auf dem Sie testen.

+0

Einstellung der Hardwarebeschleunigung behoben das Problem, aber es warn Für meine Bewerbung nicht akzeptabel. Also habe ich die Hardwarebeschleunigung nur für die bestimmte Ansicht deaktiviert. textView.setLayerType (View.LAYER_TYPE_SOFTWARE, null); –

+0

Sie haben mir das Leben gerettet, aber ich brauche wirklich Hardwarebeschleunigung, um Schatten zu rendern, und mir fehlt eine Workaround :-(Aber auf einigen Geräten funktioniert die h/ware-Beschleunigung gut und scheitert, wenn ich die App auf Samsung-Geräten teste. –

4

Im Manifest Satz in Ihrer Aktivität:

<activity 
     android:name="LoadingScreen" 
     android:hardwareAccelerated="false"> 
    </activity> 
Verwandte Themen