博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Multi-threading Android Apps for Multi-core Processors – Part 1 of 2
阅读量:4978 次
发布时间:2019-06-12

本文共 5226 字,大约阅读时间需要 17 分钟。

Can my single-threaded application benefit from multiple cores? How?

Even a single-threaded application can benefit from parallel processing on different cores. For example, if your application uses a media server, then the media processing and your UI rendering application logic can run on different cores at the same time. Also, the garbage collector can run on a different core. 

How can I write code that takes advantage of multiple cores?

To realize the maximum potential of the available processing power on multi-core devices, write your application with concurrency in mind. The application should be designed so that tasks which can be executed in parallel are set up to run on separate threads.

The UI Thread

In Android, the main thread is the same as the UI thread. This thread is responsible for handling all the UI events.

When you’re writing multi-threaded applications in Android, keep these things in mind about the UI thread (or main thread):

  • Only the main thread should update the UI. All other threads in the application should return data back to the main thread to update the UI.
  • There is no single point of entry in an Android application. An Android application can be entered from an Activity, Service or a Broadcast Receiver, all of which run on the UI thread.
  • Very important – The UI thread should not perform tasks that take longer than a few seconds, or else you run the risk of a sluggish user experience in your app. Read Android documentation about  to learn more.

As a rule of thumb, whenever your application needs to perform a longer task(s) from the UI thread, then it should parallelize using one of the parallelization techniques provided by Android: Java threads, AsyncTask or IntentService.

Parallelization technique: Java threads

The standard ways of creating threads in Java are also available in Android: extending the Thread class or implement the Runnable interface. However, if you want to pass messages to and from a thread, you need to implement message queues using android.os.Message, android.os.Handler, android.os.Looper, etc.

Also, if your application involves creating multiple threads then you might have to take care of multi-threading concurrency issues like race conditions, deadlocks and starvation. To learn more about Java threads and message passing between threads, read through the Java tutorial, .

When should I use Java threads for parallelization?

When you want to parallelize tasks running longer than a few seconds, you should use Java threads from the UI thread. Android provides other, easier ways to parallelize, like AsyncTask and IntentService, so for most simple applications you may not need Java threads.

Parallelization technique: AsyncTask

 provides the functionality to run short tasks (a couple of seconds long) in the background from the UI thread using a method called doInBackground(). You do not need to implement any message passing to and from the UI thread.  An AsyncTask uses 3 types of data:

  • Params - parameters passed to the background method as inputs.
  • Progress - data passed to the UI thread for updating progress.
  • Result - data returned from the background method upon completion.

You can implement an AsyncTask using the following steps, found in :

  • Extend the AsyncTask class.
  • Implement the following methods:
    • onPreExecute() - performs setup like showing a progress dialog before executing the task. This method is invoked on the UI thread.
    • doInBackground(Params...) - executes all of the code that you want to run in the background and sends updates to onProgressUpdate() and the result to onPostExecute(Result). It is invoked on a pool of background threads.
    • onProgressUpdate() - invoked when publishProgress() is called from the doInBackground() method. It is invoked on the UI thread. 
    • onPostExecute() - receives the return value from doInBackground(). It is invoked on the UI thread.
    • onCancelled() - invoked when cancel() is called. Invoked on the UI thread.
  • Create an instance of your extended AsyncTask class on the UI thread.
  • Call the execute() method.

Rules

  • Your extended AsyncTask class is executed by calling the execute() method, which runs on the UI thread and spawns a separate background thread to execute your task.
  • The order of execution of AsyncTask methods is: onPreExecute() -> doInBackground(Params…) -> onProgressUpdate() -> onPostExecute() or onCancelled().
  • None of the above methods can be invoked directly.
  • One instance of an AsyncTask can only be executed once. Execute should be called using multiple instances if you want to run multiple tasks.
  • An AsyncTask must be created on the UI thread.

When should I use an AsyncTask for parallelization?

Use an AsyncTask whenever you have a short background task which needs communication with the UI thread. AsyncTask is appropriate for short tasks only because it creates and manages threads for you, and you don't want to tie up resources with thread(s) that you did not create. Use Java threads and handlers from inside a service for longer-running (more than a few seconds) tasks. See the  for more information.

 

转载:https://developer.qualcomm.com/blog/multi-threading-android-apps-multi-core-processors-part-1-2

转载于:https://www.cnblogs.com/liaojie970/p/5795396.html

你可能感兴趣的文章
九涯的第一次
查看>>
处理器管理与进程调度
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>
java if 用法详解_Java编程中的条件判断之if语句的用法详解
查看>>
matlab sin函数 fft,matlab的fft函数的使用教程
查看>>
mysql adddate()函数
查看>>
mysql sin() 函数
查看>>
单片机复位电路
查看>>
php json_decode失败,返回null
查看>>
3-day3-list-truple-map.py
查看>>
Edit控件显示多行文字
查看>>
JS第二周
查看>>
dataTable.NET的search box每輸入一個字母進行一次檢索的問題
查看>>
Python 文件处理
查看>>
邻接表详解
查看>>
迭代dict的value
查看>>
eclipse package,source folder,folder区别及相互转换
查看>>
Py 可能是最全面的 python 字符串拼接总结(带注释版)
查看>>
《Java程序设计实验》 软件工程18-1,3 OO实验2
查看>>
【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】
查看>>