Android——Hander和AsyncTask的使用
2015-09-18 20:16
218 查看
Handler
倒计时实现方法1(通过线程间的通讯):
import android.os.Handler; import android.os.Message; import java.util.logging.LogRecord; public class MainActivity extends AppCompatActivity { private Button mBtnTime; private int count=60; private static final int TIME_DESC=0; private Handler handler=new Handler() { //Handle注意导对包,android下的包
@Override public void handleMessage(Message msg){ switch (msg.what){ case TIME_DESC: String time= (String) msg.obj; mBtnTime.setText(time); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtnTime= (Button) findViewById(R.id.btn_time_desc); mBtnTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count=60; new Thread(new Runnable() { @Override public void run() { while (count>0){ count--; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } Message msg=new Message(); msg.obj=count+"秒"; msg.what=TIME_DESC; handler.sendMessage(msg); } } }).start(); } }); } }
倒计时实现方法2
import android.os.Handler; public class MainActivity extends AppCompatActivity { private Button mBtnTime; private int count=60; private static final int TIME_DESC=0; private Handler handler=new Handler() { @Override public void handleMessage(Message msg){ switch (msg.what){ case TIME_DESC: if (count>0){ count--; mBtnTime.setText(count+"秒"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendEmptyMessage(TIME_DESC); break; } }} }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtnTime= (Button) findViewById(R.id.btn_time_desc); mBtnTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count=60; handler.sendEmptyMessage(TIME_DESC); } }); } }
AsyncTask
public class MainActivity extends AppCompatActivity { private Button mBtnStart; private int count=0; private ProgressBar mProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mProgressBar= (ProgressBar) findViewById(R.id.progressbar); mBtnStart= (Button) findViewById(R.id.btn_start); mBtnStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new MyTask().execute("下载完成");//调用MyTask } }); } class MyTask extends AsyncTask<String,String,String>{ @Override protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); int count=Integer.parseInt(values[0]); mProgressBar.setProgress(count); } @Override protected void onPostExecute(String s) { //执行完成,s是 doInBadkground的返回值 super.onPostExecute(s); mBtnStart.setText(s); } @Override protected String doInBackground(String... params) { //后台执行中
while (count<101){ count++; publishProgress(""+count);//将数据传给onProgressUpdate中values
try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } return params[0]; //返回到onPostExcute中的s } } }
、
相关文章推荐
- Android四大组件——Service详解
- Android内存管理、Android中Dalvik和JVM的区别
- ubuntu14.04下载android source code
- android 开发 小技巧
- android log 日志管理
- Android 解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
- 你是不是也被Android Private Libraries、Referenced Libraries、android Dependency搞晕了~~
- Android 自定义View实现SlideSwitchView
- android:windowSoftInputMode属性详解
- android init.rc文件语法详解
- Android CheckBox实现SwitchButton
- android自定义组件(手机加速球+水面波动效果)
- android多媒体——5步学会使用系统相机
- Android-sqlite3 not found解决
- Android EditText监听只能输入2位小数
- android开发(45) 自定义软键盘(输入法)
- android github 资源地址
- android studio下使用getclassloader().getresourceasstream()的问题
- 【Android】课程表布局实现(支持动态添加课程)
- android开发(44) 使用了 SoundPool 播放提示音