I have been struggling with this issue since a long time.I am a newbie to android. I have done all the homework and gone through all the topics related to my issues but it did not help.
My app code is based on lunar lander with modifications. I have got a splash screen which then displays a menu screen which launches my main activity. In my App, I have a class Game which I have declared in the main.xml as follows:- I am pasting the portion of the xml file:- <?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/ res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/desert" android:clipToPadding="true"> <com.example.android.Game android:id="@+id/Game" android:layout_width="fill_parent" android:layout_height="fill_parent"/> I am trying to inflate this activity from my app's MainActivity as follows:- Unlike lunar lander my thread is seperate class from the Main activity. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); mGame = (Game) findViewById(R.id.Game); mGameThread = mGame.getThread(); I have created a thread the definition of which is in a seperate file but but which is declared as part of Game class.. The problem I am facing is that the surfacecreated for my Game class is never called.So the thread never runs. Below I am pasting the Game Class public class Game extends SurfaceView implements SurfaceHolder.Callback{ private int mX; private int mY; private int mSpeedX; private int mSpeedY; private Bitmap mBitmap; private GameThread thread; public static Context mContext; private TextView mStatusText; private boolean mSurfaceExists; public Game(Context context) { super(context); SurfaceHolder holder = getHolder(); holder.addCallback(this); // create thread only; it's started in surfaceCreated() Log.w(this.getClass().getName(),"Before thread create"); thread = new GameThread(holder, context, new Handler() { @Override public void handleMessage(Message m) { Log.w(this.getClass().getName(),"In Handle message"); mStatusText.setVisibility(m.getData().getInt("viz")); mStatusText.setText(m.getData().getString("text")); } }); setFocusable(true); // make sure we get key events } public Game(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); SurfaceHolder holder = getHolder(); holder.addCallback(this); // create thread only; it's started in surfaceCreated() Log.w(this.getClass().getName(),"Before thread create"); thread = new GameThread(holder, context, new Handler() { @Override public void handleMessage(Message m) { Log.w(this.getClass().getName(),"In Handle message"); mStatusText.setVisibility(m.getData().getInt("viz")); mStatusText.setText(m.getData().getString("text")); } }); setFocusable(true); // make sure we get key events } public Game(Context context, AttributeSet attrs) { super(context, attrs); // register our interest in hearing about changes to our surface SurfaceHolder holder = getHolder(); holder.addCallback(this); // create thread only; it's started in surfaceCreated() Log.w(this.getClass().getName(),"Before thread create"); thread = new GameThread(holder, context, new Handler() { @Override public void handleMessage(Message m) { Log.w(this.getClass().getName(),"In Handle message"); mStatusText.setVisibility(m.getData().getInt("viz")); mStatusText.setText(m.getData().getString("text")); } }); setFocusable(true); // make sure we get key events } /** * Fetches the animation thread corresponding to this LunarView. * * @return the animation thread */ public GameThread getThread() { return thread; } /** * Standard window-focus override. Notice focus lost so we can pause on * focus lost. e.g. user switches to take a call. */ @Override public void onWindowFocusChanged(boolean hasWindowFocus) { if (!hasWindowFocus) thread.pause(); } /** * Installs a pointer to the text view used for messages. */ public void setTextView(TextView textView) { mStatusText = textView; } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub Log.w(this.getClass().getName(),":In surface changed"); thread.setSurfaceSize(width, height); } public void surfaceCreated(SurfaceHolder arg0) { // TODO Auto-generated method stub // start the thread here so that we don't busy-wait in run() // waiting for the surface to be created mSurfaceExists = false; Log.w(this.getClass().getName(),"In Surface create"); Log.w(this.getClass().getName(),":Before starting thread at create"); thread.setRunning(true); thread.start(); } /* * Callback invoked when the Surface has been destroyed and must no longer * be touched. WARNING: after this method returns, the Surface/ Canvas must * never be touched again! */ public void surfaceDestroyed(SurfaceHolder arg0) { // TODO Auto-generated method stub // 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; mSurfaceExists = false; Log.w(this.getClass().getName(),"In Surface destroy"); thread.setRunning(false); while (retry) { try { thread.join(); retry = false; } catch (InterruptedException e) { } } } -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en