/**
 * 使用AsyncTask做的锅炉压力值变化,动态显示的demo
 * @author pang
 * !!!这是自己学jni时写的小demo,c的代码是产生一个0-300的随机数。在jni文件夹下的com_pang_monitor_MainActivity.c文件中
 *
 * 有什么不足,请指出。谢谢。共同进步!
 * 求教大神,AsyncTask<Void, Void, Void>,第二个参数和第三个参数的使用技巧。谢谢
 */
public class MainActivity extends Activity { protected static final String TAG = "MainActivity";
private int progress;//锅炉不断变化的值
private MediaPlayer mp;//锅炉值大于280报警用的音乐

//c加载动态链接库所用到的
static {
System.loadLibrary("Monitor");
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fillData();
} public void fillData() {

AsyncTask<Void, Void, Void> astntask=new AsyncTask<Void, Void, Void>(){
//取代handler中执行的代码,在子线程中运行
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
boolean flag=true;
while(flag){
progress = processNative();
Log.i(TAG, "process:"+progress);
//锅炉的值大于280报警音乐
if (progress > 270) {
mp = MediaPlayer.create(MainActivity.this, R.raw.ylzs);
mp.start();
return null ;
}
//只有publishProgress()了才能调用onProgressUpdate()
publishProgress();

SystemClock.sleep(1000);
}
return null;
}
//更新的时候调用,记得在dpInBackground中调用publishProgress();    例:进度条显示数据,走格时,调用次方法。
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
MyView mv = new MyView(MainActivity.this, progress);
setContentView(mv);
super.onProgressUpdate(values);
}
//主线程更新Ui,界面更新前调用的方法,例:当读取数据需要进度条先显示的时候可以,放在此方法中。
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub super.onPreExecute();
}
//主线程更新ui,界面更新后的方法,例:当进度条读完之后,隐藏进度条,放在此方法中。
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
MyView mv = new MyView(MainActivity.this, progress);
setContentView(mv);
super.onPostExecute(result);
}
};
astntask.execute();
} @Override
protected void onStop() {
// TODO Auto-generated method stub
if(mp!=null){
mp.stop();
mp.release();
mp = null;
}
super.onStop();
}
//c用到的方法
public native int processNative();
}
源码地址:
另外求教AsyncTask的第二个参数和第三个参数的应用案例。AndroidasynctaskJNI