Android学习十二:跑马灯程序实现(简单联系)

package org.tonny;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends Activity
{
    private TextView mTv;
    private final int TIME = 1000;
    private Timer mTimer;
    private Handler mHandler = new Handler()
    {
        public void handleMessage(Message msg)
        {
            super.handleMessage(msg);
            switch (msg.what)
            {
            case 1:
                // AsyncTask的创建时在这里进行的,而不是在TimerTask的run中进行的
                new OperAsyncTask().execute(mTv.getText().toString());
                break;
            }

        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTv = (TextView) findViewById(R.id.tv_content);

        // 使用了TimerTask + Handler的方法来实现
        mTimer = new Timer();
        mTimer.schedule(new TimerTask()
        {

            @Override
            public void run()
            {
                // 不能直接在这里创建OperAsyncTask,会报错
                // 所以使用了这种方法
                Message message = mHandler.obtainMessage();
                message.what = 1;
                mHandler.sendMessage(message);
            }
        }, TIME, TIME); // 1s后执行task,周期为1s
    }

    /**
     * 字符串处理
     * 
     * @param content
     * @return
     */
    private String moveHeader2TailByOne(String content)
    {
        // 获取第一个元素
        String header = content.substring(0, 1);
        // 获取从第二个元素开始的后面的所有的元素
        String tail = content.substring(1);
        return tail + header;
    }

    /**
     * 定义线程,用于字符串的处理和更新
     * 
     * @author Administrator
     * 
     */
    private final class OperAsyncTask extends AsyncTask<String, Void, String>
    {

        @Override
        protected String doInBackground(String... params)
        {
            return moveHeader2TailByOne(params[0]);
        }

        @Override
        protected void onPostExecute(String result)
        {
            mTv.setText(result);
        }

    }
}

字符串的处理存在问题;为什么不能再task中创建异步线程?

posted @ 2015-06-11 02:57  oneqhw  阅读(274)  评论(0编辑  收藏  举报