Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
#1

Прога крэшиться при сворачивании(нажатии Home) - Программирование Android

13.01.2013, 17:41. Просмотров 911. Ответов 14
Метки нет (Все метки)

Помогите, вот сорец:
Java
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package com.example;
 
import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
 
import java.util.ArrayList;
 
public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    public boolean _run = false;
    Panel pnl;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        pnl = new Panel(this);
        setContentView(pnl);
    }
    class Panel extends SurfaceView implements SurfaceHolder.Callback {
        private TutorialThread _thread;
 
        public Panel(Context context) {
            super(context);
            getHolder().addCallback(this);
            _thread = new TutorialThread(getHolder(), this);
            setFocusable(true);
        }
 
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            synchronized (_thread.getSurfaceHolder()) {
                if (event.getAction() == MotionEvent.ACTION_MOVE) {
                }
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                }
                if (event.getAction() == MotionEvent.ACTION_UP) {
                }
                return true;
            }
        }
 
        @Override
        public void onDraw(Canvas canvas) {
            canvas.drawColor(Color.BLACK);
            Paint mPaint = new Paint();
            //int color = 0xaf000000;
            mPaint.setColor(Color.WHITE);
            mPaint.setStrokeWidth(2);
            canvas.drawText("something", 50, 50, mPaint);
        }
 
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            // TODO Auto-generated method stub
        }
 
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            _thread.setRunning(true);
            _thread.start();
        }
 
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            // simply copied from sample application LunarLander:
            // we have to tell thread to shut down & wait for it to finish, or else
            // it might touch the Surface after we return and explode
            boolean retry = true;
            _thread.setRunning(false);
            while (retry) {
                try {
                    _thread.join();
                    retry = false;
                } catch (InterruptedException e) {
                    // we will try it again and again...
                }
            }
        }
    }
    class TutorialThread extends Thread {
        private SurfaceHolder _surfaceHolder;
        private Panel _panel;
        //public boolean _run = false;
 
        public TutorialThread(SurfaceHolder surfaceHolder, Panel panel) {
            _surfaceHolder = surfaceHolder;
            _panel = panel;
        }
 
        public void setRunning(boolean run) {
            _run = run;
        }
 
        public SurfaceHolder getSurfaceHolder() {
            return _surfaceHolder;
        }
 
        @Override
        public void run() {
            Canvas c;
            while (_run) {
                try{
                    Thread.sleep(100);
                }catch(Exception x){}
                c = null;
                try {
                    //if(drawn == false)
                    {
                        //]drawn = true;
                        try{
                        c = _surfaceHolder.lockCanvas(null);
                        synchronized (_surfaceHolder) {
                            _panel.onDraw(c);
                        }
                        }catch (Exception cc)
                        {
                            cc.toString();
                        }
                    }
                } finally {
                    // do this in a finally so that if an exception is thrown
                    // during the above, we don't leave the Surface in an
                    // inconsistent state
                    if (c != null) {
                        _surfaceHolder.unlockCanvasAndPost(c);
                    }
                }
                //catch (Exception cx)
                  //      {}
            }
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2013, 17:41     Прога крэшиться при сворачивании(нажатии Home)
Посмотрите здесь:

Как закрыть приложение при нажатии кнопки back или home? - Basic4Android
Добрый день уважаемые! Помогите с написанием кода. Мне необходимо, что бы при нажатии кнопок back и home, мое приложение закрывалось. Как...

Действие при сворачивании или при выходе - Программирование Android
Добрый вечер. Вот такой небольшой вопрос. Какими действиями можно сделать так, чтобы к примеру когда пользователь сворачивал...

Ошибка при сворачивании - Программирование Android
При сворачивании приложения (например при нажатии кнопки home) выходит сообщение "В приложении "narrator" произошла ошибка". Как исправить?...

При сворачивании приложения, останавливается радио - Программирование Android
Здравствуйте. у меня есть фрагмент, в котором при нажатии на play играет радио, когда я сворачиваю приложение, то останавливается радио....

Canvas-игра. Вылет при сворачивании - Программирование Android
public class GameView extends SurfaceView { private GameThread mThread; SurfaceHolder holder; Bitmap fon =...

Ошибка при нажатии - Программирование Android
делаю приложение по урокам http://dajver.blogspot.com/2012/01/android-4-ontouchevent.html GameView.java public class GameView...

Ошибка при нажатии на кнопку - Программирование Android
package ru.test.gthen; import android.app.*; import android.os.*; import android.view.*; import android.widget.*; import...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
13.01.2013, 19:46     Прога крэшиться при сворачивании(нажатии Home) #2
смотрите логи.
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 462
13.01.2013, 21:14     Прога крэшиться при сворачивании(нажатии Home) #3
Surface уничтожается при приостановке активности.
Надо проверять её валидность и не рендерить когда прога на паузе.
Пример из книжки:

Кликните здесь для просмотра всего текста
Java
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.example.testproject;
 
import android.os.Bundle;
import android.app.Activity;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.Bitmap.Config;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
 
public class MyActivity extends Activity {
    private AndroidFastRenderView renderView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
        boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
        int frameBufferWidth = isLandscape ? 480 : 320;
        int frameBufferHeight = isLandscape ? 320 : 480;
        Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,
                frameBufferHeight, Config.RGB_565);
        
        renderView = new AndroidFastRenderView(this, frameBuffer);
        setContentView(renderView);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_my, menu);
        return true;
    }
    
    @Override
    public void onResume() {
        super.onResume();
        renderView.resume();
    }
    
    @Override
    public void onPause() {
        super.onPause();
        renderView.pause();
    }
 
    class AndroidFastRenderView extends SurfaceView implements Runnable {
        Bitmap framebuffer;
        Canvas canvas;
        
        float color = 0;
        
        Thread renderThread = null;
        SurfaceHolder holder;
        volatile boolean running = false;
        
        public AndroidFastRenderView(Activity game, Bitmap framebuffer) {
            super(game);
            this.framebuffer = framebuffer;
            this.canvas = new Canvas(framebuffer);
            this.holder = getHolder();
        }
 
        public void resume() { 
            running = true;
            renderThread = new Thread(this);
            renderThread.start();         
        }
        
        private void update(float deltaTime)
        {
            int w = framebuffer.getWidth();
            int h = framebuffer.getHeight();
            color += 0.2f *deltaTime;
            if (color > 1)
                color = 0;
            int c = (int)(255*color);
            canvas.drawARGB(255, c, c, c);
        }
        
        public void run() {
            Rect dstRect = new Rect();
            long startTime = System.nanoTime();
            while(running) {  
                if(!holder.getSurface().isValid())
                    continue;           
                
                float deltaTime = (System.nanoTime()-startTime) / 1000000000.0f;
                startTime = System.nanoTime();
 
                update(deltaTime);
                
                Canvas canvas = holder.lockCanvas();
                canvas.getClipBounds(dstRect);
                canvas.drawBitmap(framebuffer, null, dstRect, null);                           
                holder.unlockCanvasAndPost(canvas);
            }
        }
 
        public void pause() {                        
            running = false;
            while(true) {
                try {
                    renderThread.join();
                    break;
                } catch (InterruptedException e) {
                    // retry
                }
            }
        }        
    }
}
MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
13.01.2013, 22:52  [ТС]     Прога крэшиться при сворачивании(нажатии Home) #4
Добавил
Java
1
2
 if(!_surfaceHolder.getSurface().isValid())
                    continue;
в Run - не помогло друззя мои, крэшится при разворачивании...

Добавлено через 7 минут
Не знаю как продебагать такое...
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
13.01.2013, 22:58     Прога крэшиться при сворачивании(нажатии Home) #5
логи смотрите говорю.
MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
14.01.2013, 00:33  [ТС]     Прога крэшиться при сворачивании(нажатии Home) #6
Цитата Сообщение от V0v1k Посмотреть сообщение
логи смотрите говорю.
где и как? Среда - Intelij IDEA.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.01.2013, 00:51     Прога крэшиться при сворачивании(нажатии Home) #7
в IDEA не знаю, но это первый вопрос который вы должны были выяснить.
tester3000
4 / 4 / 0
Регистрация: 19.10.2012
Сообщений: 33
14.01.2013, 04:14     Прога крэшиться при сворачивании(нажатии Home) #8
MegaSinner, Shift-F9 внизу после запуска будет вкладка Logсat
Salty_Sugar
26 / 26 / 1
Регистрация: 02.04.2012
Сообщений: 140
14.01.2013, 05:31     Прога крэшиться при сворачивании(нажатии Home) #9
MegaSinner, там внизу после запуска выйдет меню. Еще ниже будут вкладки "Run", "Debug", "TODO", "Android".
Переключись на вкладку "Android". Красным цветом будут выделены ошибки. Если будет трудно ориентироваться можно в поиске вбить название вашего пакета или приложения.
MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
14.01.2013, 19:13  [ТС]     Прога крэшиться при сворачивании(нажатии Home) #10
Пасибо, нашел, буду раздупляться...

Добавлено через 3 часа 40 минут
В логах значит:
FATAL EXCEPTION: main
java.lang.IllegalThreadStateException: Thread already started.
Я так понял поток уже создан. Что мне с этим делать, как пофиксить?

Добавлено через 46 минут
Не удается повторно запустить поток
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.01.2013, 19:33     Прога крэшиться при сворачивании(нажатии Home) #11
а зачем запускать уже запущенный поток?
MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
14.01.2013, 20:13  [ТС]     Прога крэшиться при сворачивании(нажатии Home) #12
Он приостанавливается при нажатии HOME. Поменял while (_run) на while (true) и добавил If(_run), чтобы цикл был вечным. Метод OnResume() не вызывается при разворачивании, пробовал вручную поменять значение _run на тру - получил NullPointerException на 124 строке..
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 462
14.01.2013, 20:54     Прога крэшиться при сворачивании(нажатии Home) #13
В твоём примере поместить 32 строчку перед 66-ой.
Метод onResume() возвращает с паузы (см. Activity Lifecycle).
MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
14.01.2013, 23:46  [ТС]     Прога крэшиться при сворачивании(нажатии Home) #14
Помогло, как я раньше не додумался..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2013, 23:59     Прога крэшиться при сворачивании(нажатии Home)
Еще ссылки по теме:

Вылет при нажатии кнопки - Программирование Android
Доброго времени суток. Опять непонятная ошибка, при нажатии кнопки приложение вылетает. Вот ошибка: java.lang.IllegalStateException:...

Действие при нажатии на ссылку - Программирование Android
Есть TextView, в тексте содержится ссылка. Как сделать, чтоб при нажатии на ссылку происходило какое-то действие (не переход по адресу или...

Зависает программа при нажатии кнопки - Программирование Android
Суть программы была такова, что при нажатии на кнопку должен запускаться цикл, который будет включать мобильный интернет и через некоторое...

Считывание чисел при нажатии на кнопки - Программирование Android
Здравствуйте . Пишу калькулятор под Android на Java . На экране есть кнопки 0-9 , + , - , * , / и запятая . Пользователь набирает цифры ,...

не работает radoiButton при повторном нажатии - Программирование Android
Есть checkBox и 4 radioButton. Кода в chackBox нет галки radioButtons должны быть неактивны. Вопрос такой: ставлю галочку, на первом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.01.2013, 23:59     Прога крэшиться при сворачивании(нажатии Home) #15
просто нельзя дважды запустить один инстанс потока, даже если остановили.


Цитата Сообщение от MegaSinner Посмотреть сообщение
Метод OnResume() не вызывается при разворачивании
должен вызываться.

Добавлено через 57 секунд
Цитата Сообщение от EVP Посмотреть сообщение
Метод onResume() возвращает с паузы (см. Activity Lifecycle).
вот и почитайте когда вызывается onPause
Yandex
Объявления
14.01.2013, 23:59     Прога крэшиться при сворачивании(нажатии Home)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru