提示:本文不涉及多线程框架,只采用安卓原生提供的多线程技术去实现多线程处理

1、通过继承Thread类或者实现Runnable接口去实现

 class TheadTask extends Thread{@Overridepublic void run() {Log.d("MainActivity","TheadTask is running");}}class ThreadRunnable implements Runnable{@Overridepublic void run() {Log.d("MainActivity","ThreadRunnable is running");}
      //用继承自Thread方式来实现多线程Thread task01=new TheadTask();task01.start();Thread task02=new TheadTask();task02.start();//用实现Runnable方式来实现多线程Thread task03=new Thread(new TheadTask());task03.start();

两种方式的区别:runnable是通过接口方式去实现的,因此可以用多个类去实现这个接口,通过接口,实现线程之间的数据共享。一般继承自Thread的无法共享数据。

2、通过线程池去实现

        //复用线程池的方式实现ExecutorService executorService = Executors.newCachedThreadPool();executorService.execute(new ExecutorServiceThread());//该线程池只有一个线程ExecutorService singleExecutorService = Executors.newSingleThreadExecutor();singleExecutorService.execute(new ExecutorServiceThread());
   class ExecutorServiceThread implements Runnable{@Overridepublic void run() {Log.d("MainActivity","ExecutorServiceThread is running");}}

线程池里面可以使用已经创建好的线程,可以减少线程销毁创建时给程序带来的开销,当遇见调用频繁的任务时可以采用线程池的方式去实现

3、通过继承AsyncTask实现

   //目前谷歌弃用了,但是一些多线性框架还在使用/*** 第一个参数 doInBackground参数* 第二个参数onProgressUpdate的参数,如果不需要可以设为void* 第三个参数doInBackground返回值,onPostExecute的参数*/class DownloadTask extends AsyncTask<String, Integer, String> {@Overrideprotected void onPreExecute() {//在异步任务开始的时候准备资源super.onPreExecute();}//必须要实现@Overrideprotected String doInBackground(String... strings) {//执行复杂耗时的任务,一定要慎用for (int i=0;i<100;i++){publishProgress(i);//如果不需要发布进度,可以不处理}return "AsyncTask任务";}@Overrideprotected void onProgressUpdate(Integer... values) {//更新进度,如果不需要的可以不实现,将第二个参数置空即可super.onProgressUpdate(values);}@Overrideprotected void onPostExecute(String s) {//在这里处理数据更新后的结果super.onPostExecute(s);}}
        //AsyncTask去执行DownloadTask downloadTask=new DownloadTask();//默认是串行,所以需要修改成并行downloadTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"www.baidu.com");

很遗憾的是,AsyncTask在现在已经是被谷歌弃用了,在使用AsyncTask的时候也要时刻注意防止内存泄露,同时AsyncTaks默认是串行方式去执行任务的,因此当有多个任务的时候,需要设置为并行方式 executeOnExecutor,AsyncTask.THREAD_POOL_EXECUTOR,去提高效率。虽然现在已经被弃用,但是一些多线程框架还是在使用,因此多了解一下没有坏处。

4、通过handle实现

//handle去执行Handler handler=new Handler(Looper.myLooper());handler.post(new Runnable() {@Overridepublic void run() {Log.d("MainActivity","handler is running");}});

handle一般用于主线程中,主线程调用handle,子线程负责处理请求数据,然后更新ui

5、通过IntentService实现

   class TaskIntentService extends IntentService{/*** @param name* @deprecated*/public TaskIntentService(String name) {super(name);}@Overrideprotected void onHandleIntent(@Nullable Intent intent) {//处理任务for (int i= 0;i<100;i++) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}sendProgress(i, 100);}Log.d("MainActivity","onHandleIntent");}private void sendProgress(int currentProgress,int totalProgress) {//得到处理后的通知可以用广播去通知Intent intent = new Intent();intent.setAction("xxxxxxx");intent.putExtra("current", currentProgress);intent.putExtra("total", totalProgress);sendBroadcast(intent);}}

IntentService这个在当前中也被谷歌弃用了,这是一个服务,在执行任务结束后服务生命周期就会结束(可查看源码,当onHandleIntent结束时就会调用终止函数),因此不适合去处理一些需要持续记录数据的操作

总结

看了前面这么多种安卓内置的多线程操作后,感兴趣的也可以去研究一下框架Rxjava,在线程中处理还算是可以的。创作不易,请勿下次一定。

Android多线程的几种实现方式相关推荐

  1. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider...

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  2. Java多线程的4种实现方式

    ** Java多线程的4种实现方式 ** 1:继承Thread并重写run方法,并调用start方法 /*** Java实现多线程的方式1* 继承Thread类,重写run方法* @author ho ...

  3. 多线程python实现方式_python多线程的两种实现方式(代码教程)

    本篇文章给大家带来的内容是关于python多线程的两种实现方式(代码教程),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 线程是轻量级的进程,进程中可划分出多个线程,线程可独立的调度 ...

  4. Android数据的四种存储方式

    很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQL ...

  5. [转][Android]Android数据的四种存储方式

    android.database.sqlite 类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBui ...

  6. IPC机制(三)--->Android中的几种IPC方式

    目录 1.每日一句 2. 作者简介 3. Android中的几种IPC方式 3.1 使用Bundle 3.2 使用文件共享 3.3 使用Messenger 3.4  使用AIDL 3.4.1 服务端 ...

  7. Qt多线程的几种实现方式

    Qt多线程的几种实现方式 在Qt中经常会遇到耗时操作,需要并发执行,这个时候就要用到多线程.Qt的多线程有多种实现形式,这里介绍3种方式. 类实现形式 用类实现多线程是最传统的实现形式,思想是写一个继 ...

  8. android java 多线程,Android多线程的四种方式

    当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread.通常一个应用的所有组件都运行在 ...

  9. Android service的两种使用方式bindService和startService使用方式

    服务与多线程的区别: 服务仍然是运行在主线程中,而Thread则是真正的开启了一个新的线程来执行先关操作. 那为什么要用服务呢,初步理解是服务是为了更好地管理线程.试想,当我们在某一个activity ...

最新文章

  1. HSSFWorkbook 与 XSSFWorkbook
  2. Android apk动态加载机制的研究
  3. 【收藏】Maven 生成打包可执行jar包
  4. BZOJ 1910 [Ctsc2002] Award 颁奖典礼
  5. 荷兰人发明的新客机是劈叉的!乘客坐在机翼上
  6. 检测到目标主机可能存在缓慢的http拒绝服务攻击_高防服务器能防住哪些攻击?“流量清洗”与它有什么关系?...
  7. JSONP和CORS两种跨域方式的介绍和方案实例
  8. UPnP的介绍和理解
  9. POJ 1185 炮兵阵地
  10. 每个开发人员都应该学习的5种编程语言(上)
  11. 华为关闭系统更新EMUI9.0禁止更新mate10降级EMUI9
  12. Camtasia2023简体中文标准版免费更新下载
  13. Leaflet基础入门教程(一)
  14. 【CSS3】边角 border-radius
  15. mac连接手机 vm_苹果 Mac 上的虚拟机怎么联接 iPhone
  16. 安装ubuntu系统过程中卡住
  17. HDOJnbsp;nbsp;2048nbsp;nbsp;nbsp;神、上帝以及老天爷
  18. FP-growth算法发现频繁项集(一)——构建FP树
  19. 笔记本电脑升级后无法用拓展坞供电,提示显示器连接可能受限。
  20. python123外汇兑换计算器_Python之计算器

热门文章

  1. 安装docker 并构建私有库
  2. STM32量产智能网络机柜监测系统开发方案
  3. Paillier算法详解及Java实现
  4. DTK的历史起源、发展,和简单入门(精华篇)
  5. Java操作es 查询时 [search_phase_execution_exception] all shards failed
  6. Android 解决handler内存泄露的方法
  7. 江苏省二级c语言考试电子书,江苏省二级c语言上机考试例题集1-20
  8. 【每日一题】打卡 3
  9. MySQL 数据库表的设计
  10. 对促销活动效果评估的一些思考