App hängt nach einer Weile

M

MightyBird

Neues Mitglied
0
Hallo,

meine erste "größere" App nach Hello World :)

Einfach ein paar Dinge ausprobieren...

Aber: nach einiger Zeit hängt die App, Home Taste auch im Sekundenbereich.

Fällt jemandem was auf? Was muss anders? Wie grenze ich das Problem ein?

Neben dem Code unten habe ich im Manifest noch Landscape festgeschrieben.

Vielen Dank für die Mühe!

Gerhard

Code:
package com.example.grafiktest;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.MotionEvent;
import android.graphics.Paint;
import android.graphics.Color;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import android.media.AudioManager;
import android.media.SoundPool;

import java.lang.Math;

// import android.graphics;

public class GrafikTest extends Activity implements OnTouchListener {

    FastRenderView renderView;
    
    Object object1 = new Object(1000,540) ;
    boolean objectTouched = false ;
    
    Paint textPaint;
    Paint shapePaint;

    SoundPool soundPool ;
    int soundID ;
    
    Bitmap objectBitmap;
    
    float touchX = 0 ;
    float touchY = 0 ;
    boolean touched = false;
    int pos = 0;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        renderView = new FastRenderView(this);
        renderView.setOnTouchListener(this);
        setContentView(renderView);
        
        // define textPaint
        textPaint = new Paint(); 
        textPaint.setColor(Color.BLACK); 
        textPaint.setStyle(Paint.Style.FILL); 
        textPaint.setTextSize(80); 

        // define shapePaint
        shapePaint = new Paint(); 
        shapePaint.setColor(Color.BLACK); 
        shapePaint.setStyle(Paint.Style.STROKE); 
        shapePaint.setStrokeWidth(5); 

        soundPool = new SoundPool(10,AudioManager.STREAM_MUSIC,0);
        soundID = soundPool.load(this,R.raw.schuss,1);

        objectBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
    }

    class Object {

        int posX = 0 ;
        int posY = 0 ;

        public Object (int x, int y) {
            this.posX = x ;
            this.posY = y ;
        }

        public int getX () {
            return posX ;
        }
        public int getY () {
            return posY ;
        }

        public void setX (int newX) {
            posX = newX ;
        }
        public void setY (int newY) {
            posY = newY ;
        }

    }
    
    public boolean onTouch (View v, MotionEvent event) {
        
        
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            touchX = event.getX();
            touchY = event.getY();
            touched = true;
            if ( (Math.abs (object1.getX() - touchX) < 100) && (Math.abs (object1.getY() - touchY) < 100) ) 
            {
                objectTouched = true ;
                soundPool.play(soundID, 80, 80, 1, 0, 1f);
            }
            break ;
        case MotionEvent.ACTION_UP:
            touchX = event.getX();
            touchY = event.getY();
            touched = false;
            objectTouched = false ;
            break ;
        case MotionEvent.ACTION_MOVE:
            touchX = event.getX();
            touchY = event.getY();
            touched = true;
            break ;
        case MotionEvent.ACTION_CANCEL:
            touchX = event.getX();
            touchY = event.getY();
            touched = false;
            objectTouched = false ;
            break ;
        }

        if (objectTouched) {
            object1.setX ( (int) touchX );
            object1.setY ( (int) touchY );
        }
        
        return true;
    }
    
    protected void onResume() {
        super.onResume();
        renderView.resume();
    }

    protected void onPause() {
        super.onPause();
        renderView.onPause();
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.grafik_test, menu);
        return true;
    }
    
    class FastRenderView extends SurfaceView implements Runnable {
        Thread renderThread = null;
        SurfaceHolder holder;
        volatile boolean running = false;
        long lastFrameTime = 0; 
        
        public FastRenderView(Context context) {
            super(context);
            holder = getHolder();
        }
        
        public void resume() {
            running = true;
            renderThread = new Thread(this);
            renderThread.start();
        }
        
        public void run() {
            while(running) {
                if(!holder.getSurface().isValid())
                    continue;
                Canvas canvas = holder.lockCanvas();

                long frameTime = System.currentTimeMillis() - lastFrameTime ;
                int fps = (int) (1000 / frameTime);
                lastFrameTime = System.currentTimeMillis();
                String fpsString = "fps: "+Long.toString(fps);
                
                String touchXString = "posX: "+Integer.toString(object1.getX());
                String touchYString = "posY: "+Integer.toString(object1.getY());
                
                canvas.drawRGB(100, 200, 50);
                
                canvas.drawText(fpsString, 100, 100, textPaint); 

                canvas.drawText(touchXString, 100, 200, textPaint);
                canvas.drawText(touchYString, 100, 270, textPaint);

                   // canvas.drawCircle(object1.getX(), object1.getY(), 100, shapePaint);
                   canvas.drawBitmap(objectBitmap, object1.getX()-72, object1.getY()-72, null);
                   
                holder.unlockCanvasAndPost(canvas);
            }
        }
        
        public void onPause() {
            running = false;
            while(true) {
                try {
                    renderThread.join();
                } catch ( InterruptedException e) {
                    // retry
                }
            }
        }
        
        public void onDestroy() {
            soundPool.release();
        }
    }
    
    
}
 
Deine Frameschleife wird so schnell es die CPU hergibt, immer wieder durchlaufen.
Mach mal einen Thread.sleep( 1000/gewünschte Framerate ) rein
(ggf . minus die Zeit, die du zum rendern gebraucht hast).
 
Könntest du die Fehlermeldung posten?

Ein paar Bemerkungen zum Code. Eine innere Klasse Object bereitet mir einfach nur Bauchschmerzen. :cursing: Lese dir einfach mal das Kapitel durch: Galileo Computing :: Java ist auch eine Insel – 9.3 Object ist die Mutter aller Klassen

Dann mache aus dem Code mehrere normale Klassen. Das macht ihn schon mal übersichtlicher.

Und sonst schau in das Buch Beginning Android 4 Games Development Beginning Apress: Amazon.de: Robert Green: Englische Bücher. Dort ist der Code, der aus diesem Buch stammt, recht gut erklärt. ;)
 
  • Danke
Reaktionen: DieGoldeneMitte
Ohja, der Klassenname Object ist böse.
 
Hallo,

erst mal danke für die Antworten. Ein paar Antworten meinerseits:

- das ganze macht genau 60 fps, also nix mit so schnell die cpu hergibt. Da gibt es irgendein Limit (Canvas/Surface?).

- Ich versuche mich mal bei Zeiten am Debugger und poste, was es da evtl. zu sehen gibt.

- OK, wenn es hilft. Klasse Object umbenannt, aber selbes Problem. War ja klar. Ausgelagert habe ich sie noch nicht... Kommt dann noch.

- Ja, der Code kommt aus dem Buch und entspricht dem auch, soweit ich das sehe. Prinzipiell geht es ja auch, nur eben nicht nach Home/Wiederaufruf (Pause/Stop). Kill / Neustart geht.

Gerhard
 
Hi,

hier der aktuelle Code und vor allem mal der Log Trace.


  • Start
  • HOME oder BACK
  • neuer Aufruf
  • Hängt
  • Stop? YES

Vielen Dank für's CHecken!!!

Gerhard

Code:
04-02 21:41:23.360: D/AndroidRuntime(31384): Calling main entry com.android.commands.am.Am
04-02 21:41:23.370: I/ActivityManager(599): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.grafiktest/.GrafikTest} from pid 31384
04-02 21:41:23.490: D/dalvikvm(599): GC_FOR_ALLOC freed 2497K, 22% free 24577K/31428K, paused 112ms, total 112ms
04-02 21:41:23.500: D/AndroidRuntime(31384): Shutting down VM
04-02 21:41:23.510: D/jdwp(31384): Got wake-up signal, bailing out of select
04-02 21:41:23.510: D/dalvikvm(31384): Debugger has detached; object registry had 1 entries
04-02 21:41:23.510: D/dalvikvm(31399): Late-enabling CheckJNI
04-02 21:41:23.510: I/ActivityManager(599): Start proc com.example.grafiktest for activity com.example.grafiktest/.GrafikTest: pid=31399 uid=10107 gids={50107}
04-02 21:41:23.530: D/dalvikvm(31399): Debugger has detached; object registry had 1 entries
04-02 21:41:23.640: I/Adreno-EGL(31399): <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13
04-02 21:41:23.650: E/MP3Extractor(182): Unable to resync. Signalling end of stream.
04-02 21:41:23.670: D/OpenGLRenderer(31399): Enabling debug mode 0
04-02 21:41:24.030: I/ActivityManager(599): Displayed com.example.grafiktest/.GrafikTest: +536ms (total +4m14s907ms)
04-02 21:41:25.862: D/audio_hw_primary(182): select_devices: out_snd_device(2: speaker) in_snd_device(0: )
04-02 21:41:25.862: D/ACDB-LOADER(182): ACDB -> send_afe_cal
04-02 21:41:29.846: D/dalvikvm(972): GC_CONCURRENT freed 490K, 45% free 10690K/19400K, paused 1ms+2ms, total 42ms
04-02 21:41:32.268: I/ActivityManager(599): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher} from pid 599
04-02 21:41:32.789: W/ActivityManager(599): Activity pause timeout for ActivityRecord{428a3ed8 u0 com.example.grafiktest/.GrafikTest t68}
04-02 21:41:36.342: I/ActivityManager(599): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.grafiktest/.GrafikTest bnds=[1460,577][1636,753]} from pid 868
04-02 21:41:36.453: D/dalvikvm(599): GC_FOR_ALLOC freed 735K, 19% free 25697K/31428K, paused 109ms, total 110ms
04-02 21:41:43.289: W/ActivityManager(599): Activity stop timeout for ActivityRecord{428a3ed8 u0 com.example.grafiktest/.GrafikTest t68}
04-02 21:41:43.289: I/ActivityManager(599): Activity reported stop, but no longer stopping: ActivityRecord{428a3ed8 u0 com.example.grafiktest/.GrafikTest t68}
04-02 21:41:43.409: I/InputDispatcher(599): Application is not responding: Window{42702040 u0 com.example.grafiktest/com.example.grafiktest.GrafikTest}.  It has been 5005.8ms since event, 5005.4ms since wait started.  Reason: Waiting because the touched window has not finished processing the input events that were previously delivered to it.
04-02 21:41:43.429: I/WindowManager(599): Input event dispatching timed out sending to com.example.grafiktest/com.example.grafiktest.GrafikTest.  Reason: Waiting because the touched window has not finished processing the input events that were previously delivered to it.
04-02 21:41:43.469: I/Process(599): Sending signal. PID: 31399 SIG: 3
04-02 21:41:43.469: I/dalvikvm(31399): threadid=3: reacting to signal 3
04-02 21:41:43.499: I/dalvikvm(31399): Wrote stack traces to '/data/anr/traces.txt'
04-02 21:41:43.499: I/Process(599): Sending signal. PID: 599 SIG: 3
04-02 21:41:43.499: I/dalvikvm(599): threadid=3: reacting to signal 3
04-02 21:41:44.450: I/Process(599): Sending signal. PID: 845 SIG: 3
04-02 21:41:44.450: I/dalvikvm(845): threadid=3: reacting to signal 3
04-02 21:41:44.450: I/dalvikvm(599): Wrote stack traces to '/data/anr/traces.txt'
04-02 21:41:44.450: I/Process(599): Sending signal. PID: 840 SIG: 3
04-02 21:41:44.450: I/dalvikvm(840): threadid=3: reacting to signal 3
04-02 21:41:44.490: I/dalvikvm(845): Wrote stack traces to '/data/anr/traces.txt'
04-02 21:41:44.490: I/Process(599): Sending signal. PID: 828 SIG: 3
04-02 21:41:44.490: I/dalvikvm(828): threadid=3: reacting to signal 3
04-02 21:41:44.510: I/dalvikvm(828): Wrote stack traces to '/data/anr/traces.txt'
04-02 21:41:44.510: I/Process(599): Sending signal. PID: 681 SIG: 3
04-02 21:41:44.510: I/dalvikvm(681): threadid=3: reacting to signal 3
04-02 21:41:44.530: I/dalvikvm(840): Wrote stack traces to '/data/anr/traces.txt'
04-02 21:41:44.821: I/dalvikvm(681): Wrote stack traces to '/data/anr/traces.txt'
04-02 21:41:46.422: D/dalvikvm(599): GC_EXPLICIT freed 2678K, 17% free 26160K/31428K, paused 4ms+9ms, total 143ms
04-02 21:41:47.003: E/ActivityManager(599): ANR in com.example.grafiktest (com.example.grafiktest/.GrafikTest)
04-02 21:41:47.003: E/ActivityManager(599): PID: 31399
04-02 21:41:47.003: E/ActivityManager(599): Reason: Input dispatching timed out (Waiting because the touched window has not finished processing the input events that were previously delivered to it.)
04-02 21:41:47.003: E/ActivityManager(599): Load: 4.73 / 5.08 / 5.57
04-02 21:41:47.003: E/ActivityManager(599): CPU usage from 2001ms to -3519ms ago:
04-02 21:41:47.003: E/ActivityManager(599):   96% 31399/com.example.grafiktest: 96% user + 0.3% kernel / faults: 86 minor
04-02 21:41:47.003: E/ActivityManager(599):   27% 599/system_server: 22% user + 5.2% kernel / faults: 306 minor
04-02 21:41:47.003: E/ActivityManager(599):   5.4% 681/com.android.systemui: 5.2% user + 0.1% kernel / faults: 1 minor
04-02 21:41:47.003: E/ActivityManager(599):   0.1% 178/debuggerd: 0% user + 0% kernel / faults: 2007 minor
04-02 21:41:47.003: E/ActivityManager(599):   1.2% 191/mpdecision: 0.3% user + 0.9% kernel
04-02 21:41:47.003: E/ActivityManager(599):   0.2% 840/com.android.phone: 0.2% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599):   0% 845/com.android.nfc: 0% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599):   0.5% 26901/kworker/u:4: 0% user + 0.5% kernel
04-02 21:41:47.003: E/ActivityManager(599):   0% 828/com.nuance.xt9.input: 0% user + 0% kernel / faults: 19 minor
04-02 21:41:47.003: E/ActivityManager(599):   0.3% 29435/com.supercell.hayday: 0.3% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599):   0.1% 179/surfaceflinger: 0% user + 0.1% kernel
04-02 21:41:47.003: E/ActivityManager(599):   0.1% 255/sensors.qcom: 0.1% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599):   0% 259/adbd: 0% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599):   0% 30635/kworker/0:0: 0% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599):   0% 30877/logcat: 0% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599): 15% TOTAL: 14% user + 1% kernel
04-02 21:41:47.003: E/ActivityManager(599): CPU usage from 2963ms to 3489ms later:
04-02 21:41:47.003: E/ActivityManager(599):   100% 31399/com.example.grafiktest: 100% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599):     98% 31399/mple.grafiktest: 98% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599):   5.6% 599/system_server: 3.7% user + 1.8% kernel
04-02 21:41:47.003: E/ActivityManager(599):     5.6% 615/ActivityManager: 3.7% user + 1.8% kernel
04-02 21:41:47.003: E/ActivityManager(599):   2.2% 191/mpdecision: 2.2% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599):     2.2% 210/mpdecision: 2.2% user + 0% kernel
04-02 21:41:47.003: E/ActivityManager(599): 0% TOTAL: 0% user + 0% kernel + 0% iowait
04-02 21:41:47.003: W/ActivityManager(599): Launch timeout has expired, giving up wake lock!
04-02 21:41:51.097: W/ActivityManager(599):   Force finishing activity com.example.grafiktest/.GrafikTest
04-02 21:41:51.217: D/dalvikvm(599): GC_FOR_ALLOC freed 1680K, 19% free 25619K/31428K, paused 120ms, total 120ms
04-02 21:41:51.217: I/ActivityManager(599): Killing 31399:com.example.grafiktest/u0a107 (adj 0): user request after error
04-02 21:41:51.227: I/WindowState(599): WIN DEATH: Window{4272ba10 u0 SurfaceView}
04-02 21:41:51.227: I/WindowState(599): WIN DEATH: Window{42702040 u0 com.example.grafiktest/com.example.grafiktest.GrafikTest}
04-02 21:41:51.267: W/InputMethodManagerService(599): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@42ca1900 attribute=null, token = android.os.BinderProxy@42a28a50
Code:
package com.example.grafiktest;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.MotionEvent;
import android.graphics.Paint;
import android.graphics.Color;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import android.media.AudioManager;
import android.media.SoundPool;

import java.lang.Math;

// import android.graphics;

public class GrafikTest extends Activity implements OnTouchListener {

    FastRenderView renderView;
    
    Man object1 = new Man(1000,540) ;
    boolean objectTouched = false ;
    
    Paint textPaint;
    Paint shapePaint;

    SoundPool soundPool ;
    int soundID ;
    
    Bitmap objectBitmap;
    
    float touchX = 0 ;
    float touchY = 0 ;
    boolean touched = false;
    int pos = 0;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        renderView = new FastRenderView(this);
        renderView.setOnTouchListener(this);
        setContentView(renderView);
        
    }

    protected void onStart() {
        super.onStart();

        // define textPaint
        textPaint = new Paint(); 
        textPaint.setColor(Color.BLACK); 
        textPaint.setStyle(Paint.Style.FILL); 
        textPaint.setTextSize(80); 

        // define shapePaint
        shapePaint = new Paint(); 
        shapePaint.setColor(Color.BLACK); 
        shapePaint.setStyle(Paint.Style.STROKE); 
        shapePaint.setStrokeWidth(5); 

        soundPool = new SoundPool(10,AudioManager.STREAM_MUSIC,0);
        soundID = soundPool.load(this,R.raw.schuss,1);

        objectBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

    }

    protected void onResume() {
        super.onResume();
        renderView.resume();
    }

    protected void onPause() {
        super.onPause();
        renderView.onPause();
    }
    
    protected void onStop() {
        super.onStop();
        soundPool.release();

        textPaint = null;
        shapePaint = null;
        objectBitmap.recycle();
        objectBitmap = null;
    }
    

        
    public boolean onTouch (View v, MotionEvent event) {
        
        
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            touchX = event.getX();
            touchY = event.getY();
            touched = true;
            if ( (Math.abs (object1.getX() - touchX) < 100) && (Math.abs (object1.getY() - touchY) < 100) ) 
            {
                objectTouched = true ;
                soundPool.play(soundID, 80, 80, 1, 0, 1f);
            }
            break ;
        case MotionEvent.ACTION_UP:
            touchX = event.getX();
            touchY = event.getY();
            touched = false;
            objectTouched = false ;
            break ;
        case MotionEvent.ACTION_MOVE:
            touchX = event.getX();
            touchY = event.getY();
            touched = true;
            break ;
        case MotionEvent.ACTION_CANCEL:
            touchX = event.getX();
            touchY = event.getY();
            touched = false;
            objectTouched = false ;
            break ;
        }

        if (objectTouched) {
            object1.setX ( (int) touchX );
            object1.setY ( (int) touchY );
        }
        
        return true;
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.grafik_test, menu);
        return true;
    }
    
    class FastRenderView extends SurfaceView implements Runnable {
        Thread renderThread = null;
        SurfaceHolder holder;
        volatile boolean running = false;
        long lastFrameTime = 0; 
        
        public FastRenderView(Context context) {
            super(context);
            holder = getHolder();
        }
        
        public void resume() {
            running = true;
            renderThread = new Thread(this);
            renderThread.start();
        }
        
        public void run() {
            while(running) {
                if(!holder.getSurface().isValid())
                    continue;
                Canvas canvas = holder.lockCanvas();

                long frameTime = System.currentTimeMillis() - lastFrameTime ;
                int fps = (int) (1000 / frameTime);
                lastFrameTime = System.currentTimeMillis();
                String fpsString = "fps: "+Long.toString(fps);
                
                String touchXString = "posX: "+Integer.toString(object1.getX());
                String touchYString = "posY: "+Integer.toString(object1.getY());
                
                canvas.drawRGB(100, 200, 50);
                
                canvas.drawText(fpsString, 100, 100, textPaint); 

                canvas.drawText(touchXString, 100, 200, textPaint);
                canvas.drawText(touchYString, 100, 270, textPaint);

                   // canvas.drawCircle(object1.getX(), object1.getY(), 100, shapePaint);
                   canvas.drawBitmap(objectBitmap, object1.getX()-72, object1.getY()-72, null);
                   
                holder.unlockCanvasAndPost(canvas);
            }
        }
        
        public void onPause() {
            running = false;
            while(true) {
                try {
                    renderThread.join();
                } catch ( InterruptedException e) {
                    // retry
                }
            }
        }
        
        public void onDestroy() {
        }
    }
    
    class Man {

        int posX = 0 ;
        int posY = 0 ;

        public Man (int x, int y) {
            this.posX = x ;
            this.posY = y ;
        }

        public int getX () {
            return posX ;
        }
        public int getY () {
            return posY ;
        }

        public void setX (int newX) {
            posX = newX ;
        }
        public void setY (int newY) {
            posY = newY ;
        }

    }

}
 
Was für ein Device hast Du?

Der Log trace meldet ein ANR (Application Not Responding). Keeping Your App Responsive | Android Developers
Sprich der UI Thread kommt nicht mehr mit.

Lagere mal dein Sound in ein Thread oder AsyncTask aus. Hoffe das hilft.
 
Hi,

es ist ein Nexus 7 2013. Und es passiert auch, wenn ich die App nicht "berühre" und keinen Sound abspiele.

Nur starten und Home/Back und wieder "starten" führt schon zu dem Problem.

Ich denke eher, dass evtl. der Touch Listener woanders installiert werden muss und auch deaktiviert?

Ciao

Gerhard
 
Dein onPause wird ja niemals fertig. :D
 
Ich glaube, ich habe das Problem gefunden. Muss es später mal ausprobieren.

Die Methode im renderview muss pause() heißen, nicht onPause. Und sie muss auch so aufgerufen werden.

Daraus ergäbe sich:

Code:
[FONT=Courier New]protected void onPause() {[/FONT]
[FONT=Courier New]       super.onPause();[/FONT]
[FONT=Courier New]       renderView.pause();[/FONT]
[FONT=Courier New]   }[/FONT]

und

Code:
[FONT=Courier New]public void pause() {[/FONT]
[FONT=Courier New]           running = false;[/FONT]
[FONT=Courier New]           while(true) {[/FONT]
[FONT=Courier New]               try {[/FONT]
[FONT=Courier New]                   renderThread.join();[/FONT]
[FONT=Courier New]               } catch ( InterruptedException e) {[/FONT]
[FONT=Courier New]                   // retry[/FONT]
[FONT=Courier New]               }[/FONT]
[FONT=Courier New]           }[/FONT]
[FONT=Courier New]       }[/FONT]


Mal sehen...

Ciao

Gerhard
 
Die Methode im renderview muss pause() heißen, nicht onPause
Unsinn, der Name der Methode ist Wurscht * **.

Du hast in deinem pause eine whileschleife, die einfach immer nur immer wieder renderThread.join() aufruf, was spätestens beim zweiten mal keinen Sinn mehr macht. Komisch eigentlich, dass das keine Exception wirft.

Mir schwant, dass MightyBird noch etwas Flugstunden (Java Grundladgen) nehmen muss :D

* ...fürs Funktionieren, zur Dokumentation ist der Name sehr wichtig!
** solange es nicht ums Überladen von Elternmethoden geht, was hier nicht der Fall ist.
 
Zuletzt bearbeitet:
OK,

ich glaube der Hint mit der nicht endenden Schleife ist gut.

Ich habe wohl ein break; vergessen.

Code:
renderThread.join();
break;

Manchmal ist es gar nicht so schwer...

Ciao

Gerhard
 
Dann mal viel Spaß.

Nur mal so eine Frage, stand im Buch der Befehl break?
 
Hi,

geht nun. Das fehlende "break;" war es.

Und ja, es stand im Buch.

Ciao

Gerhard
 

Ähnliche Themen

5
Antworten
22
Aufrufe
1.369
590239
5
R
  • Robby1950
2
Antworten
23
Aufrufe
954
Robby1950
R
D
  • Data2006
Antworten
14
Aufrufe
449
jogimuc
J
Zurück
Oben Unten