It would help to include the stack crawl of the crash. On Sun, Mar 28, 2010 at 1:19 PM, Ryan <ryan.ber...@gmail.com> wrote:
> When I click my live wallpaper, it crashes. I can't see what is wrong. > Here is my code. > > package com.puinyuu.umasaka; > > import android.graphics.Bitmap; > import android.graphics.BitmapFactory; > import android.graphics.Canvas; > import android.content.res.Resources; > import android.os.Handler; > import android.service.wallpaper.WallpaperService; > import android.view.SurfaceHolder; > > public class UmasakaWallpaper extends WallpaperService { > > private final Handler mHandler = new Handler(); > > @Override > public void onCreate() { > super.onCreate(); > } > > @Override > public void onDestroy() { > super.onDestroy(); > } > > @Override > public Engine onCreateEngine() { > return new UmasakaEngine(); > } > > class UmasakaEngine extends Engine { > > private Resources res; > private Bitmap mUmasakaFrame0; > private Bitmap mUmasakaFrame1; > private Bitmap mUmasakaFrame2; > private Bitmap mUmasakaFrame3; > private Bitmap mUmasakaFrame4; > private Bitmap mUmasakaFrame5; > private Bitmap mUmasakaFrame6; > private Bitmap mUmasakaFrame7; > private int mFrameNum = 0; > > private final Runnable mGetFrame = new Runnable() { > public void run() { > drawFrame(); > } > }; > private boolean mVisible; > > UmasakaEngine() { > mUmasakaFrame0 = BitmapFactory.decodeResource(res, > R.drawable.umasaka0); > mUmasakaFrame1 = BitmapFactory.decodeResource(res, > R.drawable.umasaka1); > mUmasakaFrame2 = BitmapFactory.decodeResource(res, > R.drawable.umasaka2); > mUmasakaFrame3 = BitmapFactory.decodeResource(res, > R.drawable.umasaka3); > mUmasakaFrame4 = BitmapFactory.decodeResource(res, > R.drawable.umasaka4); > mUmasakaFrame5 = BitmapFactory.decodeResource(res, > R.drawable.umasaka5); > mUmasakaFrame6 = BitmapFactory.decodeResource(res, > R.drawable.umasaka6); > mUmasakaFrame7 = BitmapFactory.decodeResource(res, > R.drawable.umasaka7); > mUmasakaFrame0 = Bitmap.createBitmap(mUmasakaFrame0); > mUmasakaFrame1 = Bitmap.createBitmap(mUmasakaFrame1); > mUmasakaFrame2 = Bitmap.createBitmap(mUmasakaFrame2); > mUmasakaFrame3 = Bitmap.createBitmap(mUmasakaFrame3); > mUmasakaFrame4 = Bitmap.createBitmap(mUmasakaFrame4); > mUmasakaFrame5 = Bitmap.createBitmap(mUmasakaFrame5); > mUmasakaFrame6 = Bitmap.createBitmap(mUmasakaFrame6); > mUmasakaFrame7 = Bitmap.createBitmap(mUmasakaFrame7); > } > > @Override > public void onCreate(SurfaceHolder surfaceHolder) { > super.onCreate(surfaceHolder); > } > > @Override > public void onDestroy() { > super.onDestroy(); > mHandler.removeCallbacks(mGetFrame); > } > > @Override > public void onVisibilityChanged(boolean visible) { > mVisible = visible; > if (visible) { > drawFrame(); > } else { > mHandler.removeCallbacks(mGetFrame); > } > } > > @Override > public void onSurfaceChanged(SurfaceHolder holder, int format, > int width, int height) { > super.onSurfaceChanged(holder, format, width, height); > drawFrame(); > } > > @Override > public void onSurfaceCreated(SurfaceHolder holder) { > super.onSurfaceCreated(holder); > } > > @Override > public void onSurfaceDestroyed(SurfaceHolder holder) { > super.onSurfaceDestroyed(holder); > mVisible = false; > mHandler.removeCallbacks(mGetFrame); > } > > void drawFrame() { > final SurfaceHolder holder = getSurfaceHolder(); > > Canvas c = null; > try { > c = holder.lockCanvas(); > if (c != null) { > getFrame(c); > } > } finally { > if (c != null) holder.unlockCanvasAndPost(c); > } > > // Reschedule the next redraw > mHandler.removeCallbacks(mGetFrame); > if (mVisible && mFrameNum == 0) { > mHandler.postDelayed(mGetFrame, 90); > } > if (mVisible && mFrameNum == 1) { > mHandler.postDelayed(mGetFrame, 60); > } > if (mVisible && mFrameNum == 2) { > mHandler.postDelayed(mGetFrame, 140); > } > if (mVisible && mFrameNum == 3) { > mHandler.postDelayed(mGetFrame, 60); > } > if (mVisible && mFrameNum == 4) { > mHandler.postDelayed(mGetFrame, 90); > } > if (mVisible && mFrameNum == 5) { > mHandler.postDelayed(mGetFrame, 60); > } > if (mVisible && mFrameNum == 6) { > mHandler.postDelayed(mGetFrame, 130); > } > if (mVisible && mFrameNum == 7) { > mHandler.postDelayed(mGetFrame, 60); > } > } > > void getFrame(Canvas c) { > c.save(); > if (mFrameNum == 0) { > c.drawBitmap(mUmasakaFrame0, 100, 100, null); > } > if (mFrameNum == 1) { > c.drawBitmap(mUmasakaFrame1, 100, 100, null); > } > if (mFrameNum == 2) { > c.drawBitmap(mUmasakaFrame2, 100, 100, null); > } > if (mFrameNum == 3) { > c.drawBitmap(mUmasakaFrame3, 100, 100, null); > } > if (mFrameNum == 4) { > c.drawBitmap(mUmasakaFrame4, 100, 100, null); > } > if (mFrameNum == 5) { > c.drawBitmap(mUmasakaFrame5, 100, 100, null); > } > if (mFrameNum == 6) { > c.drawBitmap(mUmasakaFrame6, 100, 100, null); > } > if (mFrameNum == 7) { > c.drawBitmap(mUmasakaFrame7, 100, 100, null); > } > mFrameNum = mFrameNum + 1; > c.restore(); > } > } > } > > -- > 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<android-developers%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > > To unsubscribe from this group, send email to android-developers+ > unsubscribegooglegroups.com or reply to this email with the words "REMOVE > ME" as the subject. > -- Dianne Hackborn Android framework engineer hack...@android.com Note: please don't send private questions to me, as I don't have time to provide private support, and so won't reply to such e-mails. All such questions should be posted on public forums, where I and others can see and answer them. -- 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 To unsubscribe from this group, send email to android-developers+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.