編輯:Android開發實例
我們都知道Hanlder是線程與Activity通信的橋梁,我們在開發好多應用中會用到線程,有些人處理不當,會導致當程序結束時,線程並沒有被銷毀,而是一直在後台運行著,當我們重新啟動應用時,又會重新啟動一個線程,周而復始,你啟動應用次數越多,開啟的線程數就越多,你的機器就會變得越慢。
為了方便 大家理解,我寫一個簡單的Demo.功能就是每2秒中將應用的Title更換一次。具體步驟如下:
第一步:新建一個Android工程命名為ThreadDemo。
第二步:修改ThreadDemo.java,代碼如下:
- package com.tutor.thread;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.util.Log;
- public class ThreadDemo extends Activity {
- private static final String TAG = "ThreadDemo";
- private int count = 0;
- private Handler mHandler = new Handler();
- private Runnable mRunnable = new Runnable() {
- public void run() {
- //為了方便 查看,我們用Log打印出來
- Log.e(TAG, Thread.currentThread().getName() + " " +count);
- count++;
- setTitle("" +count);
- //每2秒執行一次
- mHandler.postDelayed(mRunnable, 2000);
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //通過Handler啟動線程
- mHandler.post(mRunnable);
- }
- }
第三步:運行上述工程,查看運行效果:
當然上面不是重點,退出應用時,線程還在跑,打開Logcat視窗或者cmd終端查看,如下(剛吃了午餐回來,線程還在跑著):
當我們再次啟動應用時,會重新啟動一個新的線程,如下圖所示:
所以我們在應用退出時,要將線程銷毀,我們只要在Activity中的,onDestory()方法處理一下就OK了,如下代碼所示:
- @Override
- protected void onDestroy() {
- mHandler.removeCallbacks(mRunnable);
- super.onDestroy();
- }
所以ThreadDemo.java的完整代碼如下:
- package com.tutor.thread;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.util.Log;
- public class ThreadDemo extends Activity {
- private static final String TAG = "ThreadDemo";
- private int count = 0;
- private Handler mHandler = new Handler();
- private Runnable mRunnable = new Runnable() {
- public void run() {
- //為了方便 查看,我們用Log打印出來
- Log.e(TAG, Thread.currentThread().getName() + " " +count);
- count++;
- setTitle("" +count);
- //每2秒執行一次
- mHandler.postDelayed(mRunnable, 2000);
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //通過Handler啟動線程
- mHandler.post(mRunnable);
- }
- @Override
- protected void onDestroy() {
- //將線程銷毀掉
- mHandler.removeCallbacks(mRunnable);
- super.onDestroy();
- }
- }
為了引入這個概率 首先從需求說起 即:現有某Activity專門用於手機屬性設置 那麼應該如何做呢? 根據已學知識 很快一個念頭閃過 即:Activity + P
最近在做一個項目涉及到將包含圖片的簡單網頁下載到本地,方便離線時觀看,在這裡分享一下,大家做下簡單修改就可以用到自己的項目中了。(這裡用到了AQuery庫) 代
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用