Wenn ich meinen Code unten ausführen, funktioniert alles gut. Wenn ich zur vorherigen Aktivität zurückkehren möchte (mit dem Emulator), bekomme ich einen schwarzen Bildschirm und dann wird die App heruntergefahren. Ich bekomme auch einen schwarzen Bildschirm, wenn ich die Anwendung verlasse und versuche, sie fortzusetzen.Wie navigiere ich zurück und setze meine App fort, ohne sie aufzuhängen?
Der Code:
package com.example.bono.as3;
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.io.IOException;
import java.io.InputStream;
public class Main extends Activity {
DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
setContentView(drawView);
}
@Override public void onResume(){
super.onResume();
drawView.resume();
}
@Override public void onPause(){
super.onPause();
drawView.pause();
}
public class DrawView extends SurfaceView implements Runnable{
Thread gameloop = new Thread();
SurfaceHolder surface;
volatile boolean running = false;
AssetManager assets = null;
BitmapFactory.Options options = null;
Bitmap incect[];
int frame = 0;
public DrawView(Context context){
super(context);
surface = getHolder();
assets = context.getAssets();
options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
incect = new Bitmap[2];
try {
for (int n = 0; n < incect.length; n++){
String filename = "incect"+Integer.toString(n+1)+".png";
InputStream istream = assets.open(filename);
incect[n] = BitmapFactory.decodeStream(istream,null,options);
istream.close();
}
} catch (IOException e){
e.printStackTrace();
}
}
public void resume(){
running = true;
gameloop = new Thread(this);
gameloop.start();
}
public void pause(){
running = false;
while (true){
try {
gameloop.join();
}
catch (InterruptedException e){}
}
}
@Override public void run(){
while (running){
if (!surface.getSurface().isValid())
continue;
Canvas canvas = surface.lockCanvas();
canvas.drawColor(Color.rgb(85, 107, 47));
canvas.drawBitmap(incect[frame], 0, 0, null);
surface.unlockCanvasAndPost(canvas);
frame++;
if (frame > 1) frame = 0;
try {
Thread.sleep(500);
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
}
ich nicht jede Fehlermeldung im Protokoll bekommen, was ich tue, ist etwa 13 Nachrichten sagen „nahm alle Themen Aussetzung: X ms“, so dass es etwas mit dem zu tun hat meine Gameloop Thread denke ich. Leider sehe ich nicht, was das Problem in meinem Code ist ...
kann mir jemand mit diesem Problem helfen? – Taegos
Erstens, in "Pause", wenn Sie "InterruptedException" fangen, Print-Stack-Ablaufverfolgung, nicht nur fangen und nichts tun. Es ist gefährlich. Zweitens, wenn Sie pausieren, lassen Sie die 'gameloop' warten, aber' onResume', erstellen Sie einen anderen neuen 'thread', ohne den Faden zu behandeln, den Sie anhängen. Ich denke mal nach Pause und Wiederaufnahme hätte man viel Faden warten müssen. –