2016-02-07 54 views
6

我试图在我的加载屏幕上播放加载动画,并且我读了某处android不支持gif的地方,所以要么必须打入框架然后播放,或者我们可以使用Movie类。Android致命信号11(SIGSEGV),代码1,错误地址0x0,在tid 29092

继承人的主导活动 -

继承人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(); 
    } 
} 
-

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(); 
    } 

} 

在上面的代码中,我通过它传递MYGIFView.class的一个实例设置内容视图

加载活动是创建一个MYGIFView.class的实例,它会记录数据,但它会给出致命的信号11.我试图搜索,但我没有得到任何答案。

控制台日志 -

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

这是与内存有关的错误。您的设备中可能存在内存泄漏或内存不足。 –

+0

那么我该如何解决它? – hashcode55

+0

这个答案可能对你有用。祝你好运! http://stackoverflow.com/questions/17840521/android-fatal-signal-11-sigsegv-at-0x636f7d89-code-1-how-can-it-be-tracked –

回答

13

我收到了这个问题,这意味着其正在观看的很多批,所以我会回答这个问题问题 -

我发现下面一行是抛出错误 -

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

现在的问题是,这个错误具体可能是由许多原因引起的,它从来没有一个具体的原因。我的工作原因是因为我的设备不能很好地与硬件加速,所以我刚刚在清单应用程序来禁用它,就像这样 -

<android:hardwareAccelerated="false"> 

现在,它有可能是原因可能是不一样的....但最核心的原因是一样的,它的内存有关,大多数的机会它是您正在测试的设备或仿真器的固件中的错误。

+0

设置硬件加速固定的问题,但它wasn对于我的申请可以接受。所以我只禁用了特定视图的硬件加速。 textView.setLayerType(View.LAYER_TYPE_SOFTWARE,null); –

+0

你救了我一命,但我真的需要硬件加速来渲染阴影,并且缺少任何解决方法:-(但在某些设备上,当我在三星设备上测试应用程序时,h/ware加速效果很好,并且失败。 –

4

在您的活动清单中设置:

<activity 
     android:name="LoadingScreen" 
     android:hardwareAccelerated="false"> 
    </activity> 
相关问题