乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Android中定時器Timer和TimerTask的啟動,停止,暫停,繼續(xù)等操作實例

       旭龍 2012-09-18

      Android中定時器Timer和TimerTask的啟動,停止,暫停,繼續(xù)等操作實例

      分類: Android 3780人閱讀 評論(1) 收藏 舉報

      下面是一個在Android中使用定時器Timer和TimerTask的啟動,停止,暫停,繼續(xù)等操作的demo。

      需要注意的問題主要有兩點:

      1、Timer和TimerTask在調(diào)用cancel()取消后不能再執(zhí)行 schedule語句,否則提示出錯,提示如下:

      1. D/AndroidRuntime( 6672): Shutting down VM  
      2. W/dalvikvm( 6672): threadid=1: thread exiting with uncaught exception (group=0x40018560)  
      3. E/AndroidRuntime( 6672): FATAL EXCEPTION: main  
      4. E/AndroidRuntime( 6672): java.lang.IllegalStateException: Timer was canceled  
      5. E/AndroidRuntime( 6672):    at java.util.Timer.scheduleImpl(Timer.java:563)  
      6. E/AndroidRuntime( 6672):    at java.util.Timer.schedule(Timer.java:483)  
      7. E/AndroidRuntime( 6672):    at com.snowdream.timerdemo.TimerDemoActivity$2.onClick(TimerDemoActivity.java:73)  
      8. E/AndroidRuntime( 6672):    at android.view.View.performClick(View.java:2501)  
      9. E/AndroidRuntime( 6672):    at android.view.View$PerformClick.run(View.java:9107)  
      10. E/AndroidRuntime( 6672):    at android.os.Handler.handleCallback(Handler.java:587)  
      11. E/AndroidRuntime( 6672):    at android.os.Handler.dispatchMessage(Handler.java:92)  
      12. E/AndroidRuntime( 6672):    at android.os.Looper.loop(Looper.java:130)  
      13. E/AndroidRuntime( 6672):    at android.app.ActivityThread.main(ActivityThread.java:3835)  
      14. E/AndroidRuntime( 6672):    at java.lang.reflect.Method.invokeNative(Native Method)  
      15. E/AndroidRuntime( 6672):    at java.lang.reflect.Method.invoke(Method.java:507)  
      16. E/AndroidRuntime( 6672):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)  
      17. E/AndroidRuntime( 6672):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)  
      18. E/AndroidRuntime( 6672):    at dalvik.system.NativeStart.main(Native Method)  
      19. W/ActivityManager(  154):   Force finishing activity com.snowdream.timerdemo/.TimerDemoActivity  
      20. W/ActivityManager(  154): Activity pause timeout for HistoryRecord{40550560 com.snowdream.timerdemo/.TimerDemoActivity}  
      21. W/ActivityManager(  154): Activity destroy timeout for HistoryRecord{40550560 com.snowdream.timerdemo/.TimerDemoActivity}  
      22. D/dalvikvm(  800): GC_EXPLICIT freed 13K, 58% free 3127K/7431K, external 0K/0K, paused 70ms  
      23. D/dalvikvm(  562): GC_EXPLICIT freed 59K, 51% free 2935K/5959K, external 245K/512K, paused 84ms  
      24. I/ActivityManager(  154): Start proc com.android.email for service com.android.email/.service.MailService: pid=6691 uid=10019 gids={30031015}  

      2、只能在UI主線程中更新控件/組件。在其他線程中,更新控件/組件,會提示出錯,提示如下:

      (注:這種情況下,可以通過Hander發(fā)送消息的方式來更新控件/組件,詳情參考例子。)

      1. E/AndroidRuntime( 6309): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.  
      2. E/AndroidRuntime( 6309):    at android.view.ViewRoot.checkThread(ViewRoot.java:2941)  
      3. E/AndroidRuntime( 6309):    at android.view.ViewRoot.invalidateChild(ViewRoot.java:643)  
      4. E/AndroidRuntime( 6309):    at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:669)  
      5. E/AndroidRuntime( 6309):    at android.view.ViewGroup.invalidateChild(ViewGroup.java:2511)  
      6. E/AndroidRuntime( 6309):    at android.view.View.invalidate(View.java:5296)  
      7. E/AndroidRuntime( 6309):    at android.widget.TextView.checkForRelayout(TextView.java:5533)  
      8. E/AndroidRuntime( 6309):    at android.widget.TextView.setText(TextView.java:2730)  
      9. E/AndroidRuntime( 6309):    at android.widget.TextView.setText(TextView.java:2598)  
      10. E/AndroidRuntime( 6309):    at android.widget.TextView.setText(TextView.java:2573)  
      11. E/AndroidRuntime( 6309):    at com.snowdream.timerdemo.TimerDemoActivity$1.run(TimerDemoActivity.java:48)  
      12. E/AndroidRuntime( 6309):    at java.util.Timer$TimerImpl.run(Timer.java:284)  


      Demo源碼如下:

      TimerDemoActivity.java

      1. package com.snowdream.timerdemo;  
      2.   
      3. import java.util.Timer;  
      4. import java.util.TimerTask;  
      5.   
      6. import android.app.Activity;  
      7. import android.os.Bundle;  
      8. import android.os.Handler;  
      9. import android.os.Message;  
      10. import android.util.Log;  
      11. import android.view.View;  
      12. import android.widget.Button;  
      13. import android.widget.TextView;  
      14.   
      15. public class TimerDemoActivity extends Activity {  
      16.   
      17.     private static String  TAG = "TimerDemo";  
      18.   
      19.     private TextView mTextView = null;  
      20.     private Button mButton_start = null;  
      21.     private Button mButton_pause = null;  
      22.   
      23.     private Timer mTimer = null;  
      24.     private TimerTask mTimerTask = null;  
      25.   
      26.     private Handler mHandler = null;  
      27.       
      28.     private static int count = 0;  
      29.     private boolean isPause = false;  
      30.     private boolean isStop = true;  
      31.   
      32.     private static int delay = 1000;  //1s  
      33.     private static int period = 1000;  //1s  
      34.   
      35.     private static final int UPDATE_TEXTVIEW = 0;  
      36.       
      37.     @Override  
      38.     public void onCreate(Bundle savedInstanceState) {  
      39.         super.onCreate(savedInstanceState);  
      40.         setContentView(R.layout.main);  
      41.   
      42.         mTextView = (TextView)findViewById(R.id.mytextview);   
      43.         mButton_start = (Button)findViewById(R.id.mybutton_start);  
      44.         mButton_pause = (Button)findViewById(R.id.mybutton_pause);  
      45.   
      46.   
      47.         mButton_start.setOnClickListener(new Button.OnClickListener() {  
      48.             public void onClick(View v) {  
      49.                 if (isStop) {  
      50.                     Log.i(TAG, "Start");  
      51.                 } else {  
      52.                     Log.i(TAG, "Stop");  
      53.                 }  
      54.   
      55.                 isStop = !isStop;  
      56.   
      57.                 if (!isStop) {  
      58.                     startTimer();  
      59.                 }else {  
      60.                     stopTimer();  
      61.                 }  
      62.   
      63.                 if (isStop) {  
      64.                     mButton_start.setText(R.string.start);  
      65.                 } else {  
      66.                     mButton_start.setText(R.string.stop);  
      67.                 }  
      68.             }  
      69.         });  
      70.   
      71.         mButton_pause.setOnClickListener(new Button.OnClickListener() {  
      72.             public void onClick(View v) {  
      73.                 if (isPause) {  
      74.                     Log.i(TAG, "Resume");  
      75.                 } else {  
      76.                     Log.i(TAG, "Pause");  
      77.                 }  
      78.   
      79.                 isPause = !isPause;  
      80.   
      81.                 if (isPause) {  
      82.                     mButton_pause.setText(R.string.resume);  
      83.                 } else {  
      84.                     mButton_pause.setText(R.string.pause);  
      85.                 }  
      86.             }  
      87.         });  
      88.           
      89.         mHandler = new Handler(){  
      90.   
      91.             @Override  
      92.             public void handleMessage(Message msg) {  
      93.                 switch (msg.what) {  
      94.                 case UPDATE_TEXTVIEW:  
      95.                     updateTextView();  
      96.                     break;  
      97.                 default:  
      98.                     break;  
      99.                 }  
      100.             }  
      101.         };  
      102.     }  
      103.   
      104.     private void updateTextView(){  
      105.         mTextView.setText(String.valueOf(count));  
      106.     }  
      107.   
      108.     private void startTimer(){  
      109.         if (mTimer == null) {  
      110.             mTimer = new Timer();  
      111.         }  
      112.   
      113.         if (mTimerTask == null) {  
      114.             mTimerTask = new TimerTask() {  
      115.                 @Override  
      116.                 public void run() {  
      117.                     Log.i(TAG, "count: "+String.valueOf(count));  
      118.                     sendMessage(UPDATE_TEXTVIEW);  
      119.                       
      120.                     do {  
      121.                         try {  
      122.                             Log.i(TAG, "sleep(1000)...");  
      123.                             Thread.sleep(1000);  
      124.                         } catch (InterruptedException e) {  
      125.                         }     
      126.                     } while (isPause);  
      127.                       
      128.                     count ++;    
      129.                 }  
      130.             };  
      131.         }  
      132.   
      133.         if(mTimer != null && mTimerTask != null )  
      134.             mTimer.schedule(mTimerTask, delay, period);  
      135.   
      136.     }  
      137.   
      138.     private void stopTimer(){  
      139.           
      140.         if (mTimer != null) {  
      141.             mTimer.cancel();  
      142.             mTimer = null;  
      143.         }  
      144.   
      145.         if (mTimerTask != null) {  
      146.             mTimerTask.cancel();  
      147.             mTimerTask = null;  
      148.         }     
      149.   
      150.         count = 0;  
      151.   
      152.     }  
      153.       
      154.     public void sendMessage(int id){  
      155.         if (mHandler != null) {  
      156.             Message message = Message.obtain(mHandler, id);     
      157.             mHandler.sendMessage(message);   
      158.         }  
      159.     }  
      160. }  



      layout-main.xml

      1. <?xml version="1.0" encoding="utf-8"?>  
      2. <LinearLayout xmlns:android="http://schemas./apk/res/android"  
      3.     android:layout_width="fill_parent"  
      4.     android:layout_height="fill_parent"  
      5.     android:orientation="vertical" >  
      6.   
      7.     <TextView  
      8.         android:id="@+id/mytextview"  
      9.         android:layout_width="fill_parent"  
      10.         android:layout_height="wrap_content"  
      11.         android:gravity="center"  
      12.         android:text="@string/number" />  
      13.   
      14.     <LinearLayout  
      15.         android:layout_width="fill_parent"  
      16.         android:layout_height="wrap_content"  
      17.         android:gravity="center"  
      18.         android:orientation="horizontal" >  
      19.   
      20.         <Button  
      21.             android:id="@+id/mybutton_start"  
      22.             android:layout_width="wrap_content"  
      23.             android:layout_height="wrap_content"  
      24.             android:text="@string/start" />  
      25.   
      26.         <Button  
      27.             android:id="@+id/mybutton_pause"  
      28.             android:layout_width="wrap_content"  
      29.             android:layout_height="wrap_content"  
      30.             android:text="@string/pause" />  
      31.     </LinearLayout>  
      32.   
      33. </LinearLayout>  



      strings.xml

      1. <?xml version="1.0" encoding="utf-8"?>  
      2. <resources>  
      3.   
      4.     <string name="app_name">TimerDemo</string>  
      5.     <string name="number">0</string>  
      6.     <string name="start">start</string>  
      7.     <string name="stop">stop</string>  
      8.     <string name="pause">pause</string>  
      9.     <string name="resume">resume</string>  
      10.   
      11. </resources>  


      源碼下載:

      http://download.csdn.net/detail/yang_hui1986527/3922447

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多