安卓进程线程那些事

默认情况下,一个程序所有的组件都是运行在同一进程和线程当中的,我们把它叫做main thread,进程又可以包含许多线程,线程被称作为轻量级的线程

进程

安卓的应用程序是不可以控制自己的生命周期的,这份工作是交给安卓运行时来完成的,安卓运行时会根据进程所处的状态来控制程序,进程的重要度越低,则越是会被先杀死,而进程的状态则是靠里面运行的组件来指定的。

在哪里可以指定进程组件运行的进程
manifest文件当中,<activity>,<service>,<provider>,<receiver>里,我们可以使用android:process属性指定它运行在那个线程,同样的<application>结点我们也可以指定程序所有组建的运行的线程。

进程的分类

  1. 前台进程
  2. 可视进程
  3. 服务进程
  4. 后台进程
  5. 空进程

线程

安卓里的主线程有时称为UI线程,因为它主要负责屏幕界面的绘制以及与用户的交互,所以如果在UI线程里进行一些其他的繁重的任务的话,会造成线程的阻塞,超过5秒以上会出现ANR,ForceClose是因为空指针。我们需要下面两点

  • 不要阻塞UI线程
  • 不要再UI线程外尝试访问UI组件包(因为UI组件不是线程安全的)

使用AsyncTask

在使用AsyncTask之前我们可以用Handler+Message实现相同的原理,这里我们只介绍AsyncTask。

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值