android线程

Android之线程回掉更新ui

折月煮酒 提交于 2020-01-13 02:42:29
一:工作线程中的回掉更新UI public class MainActivity extends AppCompatActivity { private int i; private Callback mCallback; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.text); mCallback = new Callback() { @Override public void callback(int i) { textView.setText("i"); } }; doWorkAsNewThread(5000,mCallback); } /** * 开启工作线程 * @param delayMs 延时,以便对比 * @param callback 回掉,更新Ui */ private void doWorkAsNewThread(final long delayMs, final Callback callback

Android开发常见问题汇总

我们两清 提交于 2020-01-01 22:33:54
文章目录 1.Activity的启动模式 1.什么是Activity启动的标准模式?都会经历那些生命周期的函数? 2.什么是Activity启动的异常模式?都会经历那些生命周期? 3.怎么指定Activity在横竖屏切换的时候不敏感? 4.怎么为Activity指定为横屏或竖屏? 5.Activity启动都有哪些模式?在清单文件里面配置和在代码里面指定到底有何不同? 6.前台任务栈有Activity:AB,后台任务栈有Activity:CD,且CD的启动模式都是singleTask,现在启动Activity D,此时后退任务栈的的顺序是什么? 7.怎么给Activity指定单独的任务栈?怎么查看任务栈的? 8.Activity的启动意图都有哪些? 9.隐式意图需要配置目标组件的InterFilter,这个过滤器都有哪些信息?配置都有哪些规则? 2.跨进程通信 1.在Android开发中怎么使用多进程? 2.同一个应用中开启了多进程会造成哪些问题? 2.怎么通过Serializable来序列化和反序列化一个对象? 3.Parcelable和Serializable他们的作用是什么?有什么区别? 4.什么是Binder?什么是Binder的死亡代理? 5.什么是AIDL? 6.Android中的跨进程通信方式都有哪些? 7.什么Binder连接池? 3.View的事件体系 1

EXECUTORSERVICE线程池讲解

我的未来我决定 提交于 2020-01-01 09:56:34
ExecutorService 建立多线程的步骤: 1。定义线程类 class Handler implements Runnable{ } 2。建立ExecutorService线程池 ExecutorService executorService = Executors.newCachedThreadPool(); 或者 int cpuNums = Runtime.getRuntime().availableProcessors(); //获取当前系统的CPU 数目 ExecutorService executorService =Executors.newFixedThreadPool(cpuNums * POOL_SIZE); //ExecutorService通常根据系统资源情况灵活定义线程池大小 3。调用线程池操作 循环操作,成为daemon,把新实例放入Executor池中 while(true){ executorService.execute(new Handler(socket)); // class Handler implements Runnable{ 或者 executorService.execute(createTask(i)); //private static Runnable createTask(final int taskID) }

Android - 关于工作线程的思考

半世苍凉 提交于 2019-12-31 19:08:06
原文地址: 「关于Android中工作者线程的思考」http://droidyue.com/blog/2015/12/20/worker-thread-in-android/ 1、AsyncTask与内存泄漏:   如果在Activity中使用非静态匿名类创建AsyncTask实例,会隐式持有Activity实例的引用;   AsyncTask源码实现中,mFuture同样使用匿名内部类创建对象实例,mFuture作为执行任务最终会加入由静态成员变量SERIAL_EXECUTOR的一个ArrayDeque类型的集合中;   当Activity需要被销毁时,处于排队的AsyncTask由于对Activity实例的引用关系,导致对应的内存不能被GC回收,出现内存泄漏; 2、AsyncTask 不好好工作的 cancel(): public final boolean cancel(boolean mayInterruptIfRunning) { mCancelled.set(true); return mFuture.cancel(mayInterruptIfRunning); }   当我们调用 cancel(false),doInBackground()仍然会执行到方法结束,结束时不会去调用onPostExecute()方法,而是调用 onCancelled()方法;  

第一行代码学习笔记第十章——探究服务

久未见 提交于 2019-12-30 19:07:13
知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 使用AsyncTask 10.3 服务的基本用法 * 10.3.1 定义一个服务 * 10.3.2 启动和停止服务 * 10.3.3 活动和服务进行通信 10.4 服务的生命周期 10.5 服务的更多技巧 * 10.5.1 使用前台服务 * 10.5.2 使用IntentService 10.6 服务的最佳实践——完整版的下载示例 10.7 小结与点评 知识点回顾 10.1 服务是什么 服务(Service)是Android中实现程序后台运行的解决方案。它非常适合去执行一些不需要和用户交互而且还要求长期运行的任务。 服务并不是运行在独立的进程中,而是依赖创建服务时所在的应用程序进程 服务并不会自动开启线程,所有的代码都是默认运行在主线程中。 正常情况下,我我们都需要手动创建子线程,并在子线程中执行具体的任务,否则就有可能出现主线程被阻塞住的情况。 10.2 Android多线程编程 当我们需要执行一些耗时操作(例如:网络请求)时,都会将这些操作放在子线程中去运行,否则容易被阻塞住,从而影响用户对软件的正常使用。 10.2.1 线程的基本用法 创建线程的方式一般有如下两种: 1.

多线程与Android线程性能优化

假装没事ソ 提交于 2019-12-26 17:17:38
目录 多线程与Android线程性能优化 基础概念 CPU核心数和线程数的关系 CPU时间片轮转机制 什么是进程和线程 澄清并行和并发 高并发编程的意义、好处和注意事项 认识Java里的线程 线程的启动与中止 对Java里的线程再多一点点认识 深入理解run()和start() 其他的线程方法 线程间的共享和协作 线程间的协作 ThreadLocal 显式锁 Lock接口和synchronized的比较 Lock接口和核心方法 可重入锁ReentrantLock、所谓锁的公平和非公平 读写锁ReentrantReadWriteLock Condition接口 多线程与Android线程性能优化 基础概念 CPU核心数和线程数的关系 多核心:也指单芯片多处理器( Chip Multiprocessors,简称CMP),CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。这种依靠多个CPU同时并行地运行程序是实现超高速计算的一个重要方向,称为并行处理 多线程: Simultaneous Multithreading.简称SMT.SMT可通过复制处理器上的结构状态,让同一个处理器上的多个线程同步执行并共享处理器的执行资源可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或

黑马程序员——JAVA基础之Day24 多线程 ,死锁,线程间通信 ,线程组,线程池,定时器。

谁说胖子不能爱 提交于 2019-12-25 19:28:16
  ------- android培训 、 java培训 、期待与您交流! ---------- Lock()实现提供了比使用synchronized方法和语句可获得更广泛的锁定操作。 private Lock lock =new ReentrantLock(); 被锁的代码要用 lock.lock() lock.unlock() 包括。其中用try 。。。finally包围 同步:效率低,如果出现同步嵌套,会出现死锁。 但是安全。 死锁问题:两个或者两个以上的线程在争夺资源的过程中,发生的一种相互等待的现象 线程间通信,不同种类的线程针对同一资源的操作。 多线程还可能出现同一个数据出现多次,或者输出不匹配问题。都属于线程安全问题。 等待 唤醒机制 Object类中wait()等待 notify()唤醒单个线程 notifyAll()唤醒所有线程 这些方法调用必须通过锁对象调用,二我们刚才使用的锁对象是任意锁对象。 wait()要用try catch包围 用唤醒notify()来解决死锁 即一个run()里判断一个条件,如果成立就锁调用wait(),如果不成立,锁的判断条件改变,然后调用notify()唤醒。 运行状态图: 线程组:默认情况下是main线程组 getThreadGroup()获得线程组 Thread.currentThread().getThreadGroup()

【源码解析】AsyncTask的用法与规则

心不动则不痛 提交于 2019-12-24 10:01:13
引言 AsyncTask ,相信大家已经很熟悉了。它的内部封装了 Thread 和 Handler ,这让我们可以将一些耗时操作放到 AsyncTask ,并且能将结果及时更新到UI上。 AsyncTask 主要用于短时间耗时操作,长时间耗时操作不建议使用 AsyncTask 。下面通过Google官方的一个例子来认识 AsyncTask 的用法。 一个例子 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { protected void onPreExecute() { showProgress(); } 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

Testing和Instrumentation

筅森魡賤 提交于 2019-12-22 05:37:43
Testing和Instrumentation Android提供了一系列强大的测试工具,它针对Android的环境,扩展了业内标准的JUnit测试框架。尽管你可以使用JUnit测试Android工程,但Android工具允许你为应用程序的各个方面进行更为复杂的测试,包括单元层面及框架层面。 Android测试环境的主要特征有: 可以访问Android系统对象。 Instrumentation框架可以控制和测试应用程序。 Android系统常用对象的模拟版本。 运行单个test或test suite的工具,带或不带Instrumentation。 支持以Eclipse的ADT插件和命令行方式管理Test和Test工程。 这篇文章是对Android测试环境和测试方法的简要介绍,并假设你已经拥有一定的Android应用程序编程及JUnit测试的经验。 概要 Android测试环境的核心是一个Instrumentation框架,在这个框架下,你的测试应用程序可以精确控制应用程序。使用Instrumentation,你可以在主程序启动之前,创建模拟的系统对象,如Context;控制应用程序的多个生命周期;发送UI事件给应用程序;在执行期间检查程序状态。Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。 通过在测试工程的manifest文件中添加

Testing和Instrumentation

≡放荡痞女 提交于 2019-12-22 00:04:20
Android 提供了一系列强大的测试工具,它针对 Android 的环境,扩展了业内标准的 JUnit 测试框架。尽管你可以使用 JUnit 测试 Android 工程,但 Android 工具允许你为应用程序的各个方面进行更为复杂的测试,包括单元层面及框架层面。 Android 测试环境的主要特征有: l 可以访问 Android 系统对象。 l Instrumentation 框架可以控制和测试应用程序。 l Android 系统常用对象的模拟版本。 l 运行单个 test 或 test suite 的工具,带或不带 Instrumentation 。 l 支持以 Eclipse 的 ADT 插件和命令行方式管理 Test 和 Test 工程。 这篇文章是对 Android 测试环境和测试方法的简要介绍,并假设你已经拥有一定的 Android 应用程序编程及 JUnit 测试的经验。 概要 Android 测试环境的核心是一个 Instrumentation 框架,在这个框架下,你的测试应用程序可以精确控制应用程序。使用 Instrumentation ,你可以在主程序启动之前,创建模拟的系统对象,如 Context ;控制应用程序的多个生命周期;发送 UI 事件给应用程序;在执行期间检查程序状态。 Instrumentation 框架