so just from the basic use case I dont know that I would use a handler, basically I really like Romain Guy's implementation for background user tasks that do things and then update the screen, its based on his userTask implementation:
http://code.google.com/p/apps-for-android/source/browse/trunk/Photostream/src/com/google/android/photostream/UserTask.java so to extend this, it uses generics *very wisely* so you can make any model you want for both the doInBackground params which returns the third arg, and becomes the param for onPostExecute. /** * Background task to verify the create user action. When the action comes back * it could inform the client to sync all data if the username and password match * or that there was a validation error like the user already exists, or that * this is a new user and that it successfully created it. * */ private class PostActionTask extends UserTask<Object, Void, ActionResult> { public ActionResult doInBackground(Object... params) { ActionResult result = new ActionResult(); result.setActionStatus("FAILED"); Action actionToRun = (Action)params[0]; try { result = RpcActionClient.executeAction( actionToRun, MomentaryNowApp.getString("app_momentary_now_server"), MomentaryNowApp.getInteger("app_momentary_now_server_port"), MomentaryNowApp.getString("app_momentary_action_endpoint")) ; } catch (IOException e) { Log.e(TAG, "IOException:"+e.getMessage()); } catch (HttpException e) { Log.e(TAG, "HttpException:"+e.getMessage()); } catch (URISyntaxException e) { Log.e(TAG, "URISyntaxException:"+e.getMessage()); } return result; } @Override public void onPostExecute(ActionResult result) { Log.d(TAG, "result:"+result.getActionStatus()); if(result.getActionStatus().equals("SUCCESS")) { //get the progress bar to update ProgressBar progressBar = (ProgressBar)findViewById(R.id.create_keyword_send_progress); progressBar.setVisibility(View.GONE); ImageView checked = (ImageView)findViewById(R.id.create_keyword_send_toggle); checked.setVisibility(View.VISIBLE); } } } secondly it is my understanding that AlarmManager is the timer infrastructure you would most likely use and that it would then call your background task. http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmController.html I am sure there are other ways to do this but this would be the way I would try if I was doing what you told me. Clay On Mar 2, 11:32 pm, "npak...@gmail.com" <npak...@gmail.com> wrote: > Hi all, > My purpose is very simple : each 1second, I want to redraw an object > on different place on background. > I do not know where my error on this code below. Hope that you can > show me or give me an advice to fix this problem > > Here is my code > ********************************************************************************************************************** > public class My_View extends View{ > > private Bitmap mBackground_img; > private Drawable mMoveObject; > private int mObjectw,mObjecth; > private int Dx,Dy; > > private Handler myHandler = new Handler(); > private long lasttime; > public My_View(Context context,AttributeSet ats,int ds) > { > super(context,ats,ds); > init(context); > } > public My_View(Context context,AttributeSet ats) > { > super(context,ats); > init(context); > } > public My_View(Context context) > { > super(context); > init(context); > } > > public void change() > { > invalidate(); > } > private void init(Context context) > { > Resources res = context.getResources(); > mMoveObject = res.getDrawable > (R.drawable.lander_firing); > mBackground_img = BitmapFactory.decodeResource(res, > R.drawable.my_pic); > mObjectw = mMoveObject.getIntrinsicWidth(); > mObjecth = mMoveObject.getIntrinsicHeight(); > Dx = Dy = 0; > > lasttime = System.currentTimeMillis() + 1000; > Thread mthread = new Thread(null,doBackground,"Background"); > mthread.start(); > } > private Runnable doBackground = new Runnable() > { > public void run() > { > long now = System.currentTimeMillis(); > if(lasttime < now ) > { > Dx = Dx + 10; > Dy = Dy + 10; > lasttime = now + 1000; > myHandler.post(change_view); > } > } > }; > private Runnable change_view = new Runnable() > { > public void run() > { > change(); > } > }; > @Override > public void onDraw(Canvas canvas) > { > canvas.drawBitmap(mBackground_img,0 ,0 , null); > mMoveObject.setBounds(Dx, Dy, Dx+mObjectw, Dy+mObjecth); > mMoveObject.draw(canvas); > }} > > ********************************************************************************************************************** > Hope to see your reply soon, > Thanks in advance, > NPAK --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---