android 大数据量的读写

来源:互联网 发布:qq克隆音乐软件 编辑:程序博客网 时间:2024/06/06 05:20



在android中,后台服务做一些大数据量的读写操作


这个时候是否可以考虑分批处理,按这个思路,如果我们创建一个线程去打开文件把两千多条数据写入,这个时候虽然是在子线程中,但是你会发现还是容易cpu100%


这个时候就需要考虑每次写200百条数据,是否可以在主线程中,把这些200条数据封装成对象,然后放入队列queue中


然后每次每次执行完一个再执行队列中的下一个分批对象,在此期间可以Handler来Handler.postDelayed(runnable,delayMillis);


而delayMillis的参数是最好是每个分批包不一样的,即第一个分批包是1秒后执行,第二个分批包是6秒后执行,以此类推,这样就会避开5秒内


因为读写文件出现两个cpu高峰值,为了防止读写文件在主线程中占用cpu高,导致其他按键广播或其他界面操作无响应而anr,


需要考虑放入子线程中执行,而Handler.postDelayed的第一参数runnable执行是主线程的多任务并发,runnable不是一个线程,


这里可以在该runnable里面创建一个线程,即在主线程多任务的runnable的run方法中创建一个子线程,如果这个时候new一个线程


则会有很多线程被创建,可以考虑如下


public void run() {Log.d(TAG,"===>Thread.id=" + Thread.currentThread().getId());executor.execute(new Runnable() {      @Override      public void run() {      Log.d(TAG,"===>execute child Thread.id=" + Thread.currentThread().getId());    handleBatchData( param......);    }  });}

这里的executor是 private Executor executor = Executors.newCachedThreadPool();

这样你会发现线程的execute child Thread.id= 的值是一样的,这里你会体会到线程池的好处


以上是一些想法,不知道是否有更好的处理方法



原创粉丝点击