Mac Systems
- Forum-Beiträge: 1.727
07.01.2011, 18:02:14 via Website
07.01.2011 18:02:14 via Website
Hallo,
irgendwie stehe ich mal wieder auf dem Schlauch dabei erscheint der Code recht einfach zu sein:
Ich habe einen CustomView (HandView) welchen ich mittels eine Threads triggern will, hierfür scheint der SurfaceView geeignet zu sein. Meine boolean variablen sind volatile nur um hier Missverständnisse auszuschließen!
Der Constructor sieht so aus:
Dieser wird auch durchlaufen! Weiter unten erzeuge und starte Ich einen Thread:
Ich sehe ebenfalls das die run() Methode den ersten Log eintrag ausgibt und wartet das der SurfaceViewCallback#surfaceCreated aufgerufen wird:
Leider findet das nie statt und mein Thread wartet ewig. Ich sehe nie den Log Eintrag "surfaceCreated".
Hat jemand noch eine Idee wieso das so ist?
mfg,
Mac
irgendwie stehe ich mal wieder auf dem Schlauch dabei erscheint der Code recht einfach zu sein:
Ich habe einen CustomView (HandView) welchen ich mittels eine Threads triggern will, hierfür scheint der SurfaceView geeignet zu sein. Meine boolean variablen sind volatile nur um hier Missverständnisse auszuschließen!
Der Constructor sieht so aus:
1private volatile boolean isRunning = false;
2
3 private volatile boolean hasSurface = false;
4
5 public HandView(final Context context, final AttributeSet attrs)
6 {
7 super(context, attrs);
8
9 holder = getHolder();
10 holder.addCallback(this);
2
3 private volatile boolean hasSurface = false;
4
5 public HandView(final Context context, final AttributeSet attrs)
6 {
7 super(context, attrs);
8
9 holder = getHolder();
10 holder.addCallback(this);
Dieser wird auch durchlaufen! Weiter unten erzeuge und starte Ich einen Thread:
1private void startThread()
2 {
3 isRunning = true;
4
5 trigger = new Runnable()
6 {
7
8 @Override
9 public final void run()
10 {
11 Log.d(LOG_TAG, "run entered");
12 while (!hasSurface && isRunning)
13 {
14 try
15 {
16 Thread.sleep(50L);
17 }
18 catch (InterruptedException e)
19 {
20 Log.e(LOG_TAG, "Problem while wait", e);
21 }
22 }
23 Log.d(LOG_TAG, "init finised");
24 while (hasSurface && isRunning)
25 {
26 final Canvas canvas = holder.lockCanvas();
27 System.out.println("draw loop");
28 try
29 {
30 synchronized (holder)
31 {
32 draw(canvas);
33 }
34 }
35 catch (Exception e)
36 {
37 Log.e(LOG_TAG, "Problem while draw", e);
38 }
39 finally
40 {
41 if (canvas != null)
42 {
43 holder.unlockCanvasAndPost(canvas);
44 }
45 }
46
47 }
48 Log.d(LOG_TAG, "thread finished.");
49 }
50 };
51 final Thread t = new Thread(trigger);
52 t.start();
53 }
2 {
3 isRunning = true;
4
5 trigger = new Runnable()
6 {
7
8 @Override
9 public final void run()
10 {
11 Log.d(LOG_TAG, "run entered");
12 while (!hasSurface && isRunning)
13 {
14 try
15 {
16 Thread.sleep(50L);
17 }
18 catch (InterruptedException e)
19 {
20 Log.e(LOG_TAG, "Problem while wait", e);
21 }
22 }
23 Log.d(LOG_TAG, "init finised");
24 while (hasSurface && isRunning)
25 {
26 final Canvas canvas = holder.lockCanvas();
27 System.out.println("draw loop");
28 try
29 {
30 synchronized (holder)
31 {
32 draw(canvas);
33 }
34 }
35 catch (Exception e)
36 {
37 Log.e(LOG_TAG, "Problem while draw", e);
38 }
39 finally
40 {
41 if (canvas != null)
42 {
43 holder.unlockCanvasAndPost(canvas);
44 }
45 }
46
47 }
48 Log.d(LOG_TAG, "thread finished.");
49 }
50 };
51 final Thread t = new Thread(trigger);
52 t.start();
53 }
Ich sehe ebenfalls das die run() Methode den ersten Log eintrag ausgibt und wartet das der SurfaceViewCallback#surfaceCreated aufgerufen wird:
1@Override
2 public void surfaceCreated(SurfaceHolder holder)
3 {
4 Log.d(LOG_TAG, "surfaceCreated");
5 hasSurface = true;
6 }
2 public void surfaceCreated(SurfaceHolder holder)
3 {
4 Log.d(LOG_TAG, "surfaceCreated");
5 hasSurface = true;
6 }
Leider findet das nie statt und mein Thread wartet ewig. Ich sehe nie den Log Eintrag "surfaceCreated".
Hat jemand noch eine Idee wieso das so ist?
mfg,
Mac
Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.