title: Android Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 29092
body: <p>I'm try to play a loading animation on my loading screen, and I read somewhere that android doesn't support gifs so either you have to break in into frames and then play it or we can use the Movie class.</p>
  
  <p>Heres the leading activity - </p>
  
  <pre><code>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();
      }
  
  }
  </code></pre>
  
  <p>In the above code I've set content view by passing it an instance of MYGIFView.class - </p>
  
  <p>Heres MYGIFView.class</p>
  
  <pre><code>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();
      }
  }
  </code></pre>
  
  <p>The loading activity IS creating an instance of MYGIFView.class and it logs the data but then it gives fatal signal 11. I tried to search but I didn't get any answer. </p>
  
  <p>console log - </p>
  
  <pre><code>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: &lt;qeglDrvAPI_eglInitialize:410&gt;: 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: android.os.BinderProxy@387f1572 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
  </code></pre>