标签:
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中创建异步线程?
标签:
原文地址:http://www.cnblogs.com/supertonny/p/4567927.html