IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Bug en sorti de sous activité


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut Bug en sorti de sous activité
    Bonjour.

    J'ai un bug qui ne survient que de temps en temps, lorsque je sorts d'une sous-activité pour retourner à l'activité principale.

    J'ai pu constaté que cela provenait, ou découlait de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            c.drawBitmap(background,0,0,null);
    Voici mon main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    public class MainActivity extends Activity implements View.OnClickListener {
     
        private Button button;
     
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = ((Button)this.findViewById(R.id.button1));
            button.setOnClickListener(this);
        }
     
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
     
        @Override
        public boolean onOptionsItemSelected(MenuItem item)
        {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
     
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings)
            {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
     
        @Override
        public void onClick(View v)
        {
            Intent intent = new Intent(this, Activity2.class);
            this.startActivityForResult(intent, 1 );
        }
    }
    voici ma sous-activité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Activity2 extends Activity
    {
        GameContent gameContent;
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            gameContent = new GameContent(this);
            setContentView(gameContent);
        }
    }
    voici la class GameContent, qui est la vue du jeux de la sous activité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    public class GameContent extends SurfaceView implements SurfaceHolder.Callback
    {
     
        private GameLoop gameLoop;
        private Context context ;
        private int screenX, screenY ;
        private Bitmap background ;
        private Builder builder;
     
        public GameContent(Context c)
        {
            super(c);
            context = c ;
            gameLoop = new GameLoop (this) ;
            getHolder().addCallback(this);
            background = BitmapFactory.decodeResource(c.getResources(), R.drawable.background_1);
        }
     
        @Override
        public void surfaceCreated(SurfaceHolder holder)
        {
            if(gameLoop.getState()==Thread.State.TERMINATED)
            {
                gameLoop = new GameLoop(this);
            }
            gameLoop.setRunning(true);
            gameLoop.start();
        }
     
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
        {
            screenX = width;
            screenY = height;
            background = Bitmap.createScaledBitmap(background,width,height,true);
            builder = new Builder( context, width, height);
        }
     
     
        public void draw( Canvas c )
        {
            c.drawBitmap(background,0,0,null);
            //builder.update(c);
        }
     
     
     
        @Override
        public void surfaceDestroyed(SurfaceHolder holder)
        {
            boolean retry = true;
            gameLoop.setRunning(false);
            while (retry)
            {
                try
                {
                    gameLoop.join();
                    retry = false;
                }
                catch (InterruptedException e) {}
            }
        }
    }
    Et enfin le GameLoop, qui gère le temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    public class GameLoop extends Thread {
     
        private final static int FRAMES_PER_SECOND = 30 ;
        private final static int SKIP_TICKS = 1000 / FRAMES_PER_SECOND;
        private final GameContent view;
        private boolean running = false;
     
        public GameLoop(GameContent view){
            this.view = view;
        }
     
        public void setRunning(boolean run){
            running = run;
        }
     
        @Override
        public void run(){
            long startTime;
            long sleepTime;
     
            while (running)
            {
                startTime = System.currentTimeMillis();
     
                Canvas c = null;
                try
                {
                    c = view.getHolder().lockCanvas();
                    synchronized (view.getHolder()){view.draw(c);}
                }
                finally
                {
                    if(c != null){view.getHolder().unlockCanvasAndPost(c);}
                }
                sleepTime = SKIP_TICKS-(System.currentTimeMillis()-startTime);
                try
                {
                    if (sleepTime >= 0)
                    {
                        sleep(sleepTime);
                    }
                }
                catch (Exception e){}
            }
        }
    }
    Je me demande s'il y a pas une démarche que je n'ai pas fait correctement en ce qui concerne la fermeture de la sous activité, car c'est là qu'intervient le bug ( ce environ 1 fois sur 3 ).

    Merci beaucoup si vous pouvez m'aider

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    Bonjour.

    J'ai changé la gameLoops, mais le resultat reste le même, quand je ferme la sous activité, il plante quasiment a chaque fois.

    le nouveau gameLoops :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    public class GameLoop extends Thread 
    {
     
        private final static int FRAMES_PER_SECOND = 30 ;
        private final GameContent view;
        private boolean running = false;
     
        private long lastTime;
     
        public GameLoop(GameContent view)
        {
            this.view = view;
        }
     
        public void setRunning(boolean run)
        {
            running = run;
        }
     
        @Override
        public void run(){
     
            while (running)
            {
                long currentTime = System.nanoTime();
                float seconds = (float) (( currentTime - this.lastTime ) / 1000000000.0);
                this.lastTime = currentTime ;
     
                Canvas c = null;
                c = view.getHolder().lockCanvas();
                synchronized (view.getHolder()){view.draw( c , seconds );}
                view.getHolder().unlockCanvasAndPost(c);}
     
        }
    }

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par mazertys17 Voir le message
    il plante quasiment a chaque fois.
    Quelle est l'erreur ? Il faudrait commencer par ça... l'erreur et la stacktrace associée.

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    Merci pour ta réponse, Nicroman.

    Voici ce que me dit le logcat lorsque je quitte la sous application et qu'il plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    08-03 07:47:06.470    1994-2534/com.funyfhish.letremail.luckyfish D/﹕ HostConnection::get() New Host Connection established 0xb3eb3a20, tid 2534
    08-03 07:47:06.547    1994-2006/com.funyfhish.letremail.luckyfish I/art﹕ Background partial concurrent mark sweep GC freed 88(6KB) AllocSpace objects, 0(0B) LOS objects, 26% free, 11MB/15MB, paused 3.408ms total 109.238ms
    08-03 07:47:26.288    1994-2001/com.funyfhish.letremail.luckyfish W/art﹕ Suspending all threads took: 10.904ms
    08-03 07:47:36.789    1994-2010/com.funyfhish.letremail.luckyfish W/EGL_emulation﹕ eglSurfaceAttrib not implemented
    08-03 07:47:36.789    1994-2010/com.funyfhish.letremail.luckyfish W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xb3f1dd00, error=EGL_SUCCESS

Discussions similaires

  1. Bug dans un programme sous 13H
    Par tixweb dans le forum Windows
    Réponses: 4
    Dernier message: 09/11/2006, 08h46
  2. Sorti Rman sous unix
    Par big1 dans le forum Recovery Manager
    Réponses: 1
    Dernier message: 07/08/2006, 14h32
  3. bug à la connexion internet sous Windows xp (erreur 0x001405f3)
    Par adrienj dans le forum Dépannage et Assistance
    Réponses: 3
    Dernier message: 11/05/2006, 01h24
  4. Réponses: 1
    Dernier message: 02/05/2006, 11h41
  5. rerouter la sortie standard sous AIX
    Par HRS dans le forum Langage
    Réponses: 6
    Dernier message: 10/03/2006, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo