Async和Handler 学习笔记

来源:互联网 发布:我的淘宝网登陆 编辑:程序博客网 时间:2024/04/26 20:58
异步操作
主线程:中需要做的是调用异步操作的类函数;  
调用execute 方法


首先执行
onPreExecute()执行在UI线程中

doInBackground(Integer... param)
不运行在UI线程当中,不能对UI当中的控件进行设置和修改;
该方法中想要修改UI线程    调用 publishProgress 都会触发 onProgressUpdate()方法;

最后会将结果传递到onPostExecute
onPostExecute:在 doInBackground 方法结束之后再运行,并且运行在UI线程当中

异步线程:
在类函数中需要继承 AsyncTask<Void, Void, Void>;
三个参数第一个是定义doInBackgound()的参数类型,
第二个参数是定义 onProgressUpdate()的参数类型
第三个参数是定义了 doInBackgound 的返回值类型,以及 onPostExecute()参数类型

重写 doInBackground(Void... arg0){  在里面执行异步操作 };
“...”所接受的参数是一个可变长的参数 后面的arg0是一个数组。

Handler 的使用
在同一个线程中:先定义一个Handler对象,然后调用他的post(r)"没有调用线程对象的 start,而是直接调用它的run()方法",Runnable r = new Runnable(){重写run()};
在不同的线程中:先定义一个Thread对象,然后调用他的start(r),Runnable r = new Runnable(){重写run()};
在使用HandlerThread的getLooper()方法之前,必须先调用该类的start()方法;


HandlerThread handlerThread = new HandlerThread("handler_thread");
handlerThread.start();
MyHandler myHandler = new MyHandler(handlerThread.getLooper());
Message msg = myHandler.obtainMessage();
msg.sendToTarget();
 
classs MyHandler extends Handler{
    public MyHandler(){
}
    public MyHandler(Looper looper){
        super(looper);
}
    @Override
    public void handlerMessage(Message msg){
    }
}
 

Bundle 数据存储的工具

Handler handler = new Handler();
在主体函数中调用 handler.post(Thread);
其中Thread
Runnable Thread = new Runnable(){
        @Override
        public void run(){
        handler.postDelayed(Thread, 3000);
        //Thread.sleep(1000);
    }
}

第二种方法是在定义Handler 时重写handleMessage(Message msg){}
在Runnable 中加入 Thread.sendMessage(msg);

AQLiteOpenHelper 使用方法
作为一个访问SQLite 的助手类,提供两个方面的功能:
第一,getReableDatabase(),getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作。
第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己操作。
1.需要自己写一个类继承它
2.在SQLiteOpenHelper的子类中,必须有该构造函数
public DatabaseHelper(Context context,String name,CursorFactory,in version)
3.如果是第一次创建数据库,则执行public onCreate(SQLiteDatabase db){}

DatabaseHelper dbHelper = new DatabaseHelper(Ex_psqlActivity.this, "test_mars_db");
SQLiteDatabase db = dbHelper.getReadableDatabase();
原创粉丝点击