Hi all. I have a problem. Please help.
1. I use a multiple views.
Main menu surface view:
<view
class="com.sniko.simplepong.MainMenuActivity$MainMenuSurfaceView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:scrollbars="vertical"
android:fadingEdge="vertical" />
Main menu surface class:
public static class MainMenuSurfaceView extends SurfaceView implements
SurfaceHolder.Callback {
public static MainMenuThread drawThread;
public MainMenuSurfaceView(Context context) {
super(context);
getHolder().addCallback(this);
}
public MainMenuSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
getHolder().addCallback(this);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceCreated(SurfaceHolder holder) {
drawThread = new MainMenuThread(getHolder(), getResources(),
getWidth(), getHeight());
drawThread.setRunning(true);
drawThread.start();
}
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
// end thread work
drawThread.setRunning(false);
while (retry) {
try {
drawThread.join();
retry = false;
} catch (InterruptedException e) {
// try one more time
}
}
}
}
Main menu thread:
public class MainMenuThread extends Thread
{
int _fps = 60;
int _sleepTime = 1000/_fps;
Core _core;
private static boolean runFlag = false;
private SurfaceHolder surfaceHolder;
public MainMenuThread(SurfaceHolder surfaceHolder, Resources resources,
int width, int heigh)
{
this.surfaceHolder = surfaceHolder;
_core = new Core(width, heigh);
}
public void setRunning(boolean run) {
runFlag = run;
}
@Override
public void run() {
Canvas canvas = new Canvas();
while (runFlag)
{
try
{
canvas = surfaceHolder.lockCanvas(null);
synchronized (surfaceHolder)
{
canvas.drawRGB(176, 196, 222);
Thread.sleep(_sleepTime);
_core.DrawMenuBackground(canvas);
}
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if (canvas != null)
{
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
And another similar for options menu. I use multiple threads and surface
view because is use 1 surface and thread class I have the next situation:
When application starts, surface view start and create thread for drawing
on it. When I click options button application goes to options menu and as
I understand
starts another thread and after few seconds options thread is stop (I think
because menu surface surfaceDestroyed method is executed). By why? I was
thinking that
options activity and surface view create a new thread object and it
independent from menu thread. That's why I use multiple threads and surface
view classes. If anyone knows how
to do more simpler and faster please help!
2. So and when I start to use multiple views and threads when on options
menu I click back button it goes on main menu, little luggy (I think that
in this time options menu thread and surface view not dispose)
and then works normal (I think at that moment "garbage collector" kill
thread or surface). So how can I avoid this.
Thanks all answers!.
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en