5cosc005w mobile application development lecture 6...
TRANSCRIPT
![Page 1: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/1.jpg)
5COSC005W MOBILE APPLICATIONDEVELOPMENT
Lecture 6: Background Tasks - Network Connectivity
Dr Dimitris C. Dracopoulos
Module Web page:
http://users.wmin.ac.uk/∼dracopd/DOCUM/courses/5cosc005w/5cosc005w.html
This material is based on Android Developer Fundamentals 2 by Google used under
a Creative Commons Attribution 4.0 International license.
![Page 2: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/2.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
11
Background Tasks
1
![Page 3: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/3.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
AsyncTask and
AsyncTaskLoader
2
![Page 4: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/4.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Threads
3
![Page 5: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/5.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
The main thread
● Independent path of execution in a running program
● Code is executed line by line
● App runs on Java thread called "main" or "UI thread"
● Draws UI on the screen
● Responds to user actions by handling UI events
4
![Page 6: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/6.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
The Main thread must be fast
● Hardware updates screen every 16 milliseconds
● UI thread has 16 ms to do all its work
● If it takes too long, app stutters or hangs
5
WAIT
![Page 7: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/7.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Users uninstall unresponsive apps
● If the UI waits too long for an operation to finish, it becomes unresponsive
● The framework shows an Application Not Responding (ANR) dialog
6
![Page 8: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/8.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
7
What is a long running task?
● Network operations
● Long calculations
● Downloading/uploading files
● Processing images
● Loading data
What is a long running task?
![Page 9: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/9.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Background threads
Execute long running tasks on a background thread
● AsyncTask● The Loader Framework● Services
8
Main Thread (UI Thread)
Worker Thread Do some work
Update UI
![Page 10: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/10.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Two rules for Android threads
● Do not block the UI thread○ Complete all work in less than 16 ms for each screen
○ Run slow non-UI work on a non-UI thread
● Do not access the Android UI toolkit from outside the UI thread ○ Do UI work only on the UI thread
9
![Page 11: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/11.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
AsyncTask
10
![Page 12: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/12.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
What is AsyncTask?
Use AsyncTask to implement basic background tasks
11
Main Thread (UI Thread)
Worker ThreaddoInBackground()
onPostExecute()
![Page 13: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/13.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Override two methods
● doInBackground()—runs on a background thread○ All the work to happen in the background
● onPostExecute()—runs on main thread when work done○ Process results
○ Publish results to the UI
12
![Page 14: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/14.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
AsyncTask helper methods
● onPreExecute()○ Runs on the main thread○ Sets up the task
● onProgressUpdate()○ Runs on the main thread○ receives calls from publishProgress() from background thread
13
![Page 15: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/15.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
AsyncTask helper methods
14
Main Thread (UI Thread)
Worker ThreaddoInBackground()
onPostExecute()
publishProgress()
onProgressUpdate()onPreExecute()
![Page 16: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/16.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Creating an AsyncTask
1. Subclass AsyncTask
2. Provide data type sent to doInBackground()
3. Provide data type of progress units for onProgressUpdate()
4. Provide data type of result for onPostExecute()
private class MyAsyncTask
extends AsyncTask<URL, Integer, Bitmap> {...}
15
![Page 17: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/17.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
MyAsyncTask class definitionprivate class MyAsyncTask
extends AsyncTask<String, Integer, Bitmap> {...}
doInBackground()doInBackground(
● String—could be query, URI for filename● Integer—percentage completed, steps done● Bitmap—an image to be displayed● Use Void if no data passed
16
onPostExecute()
doInBackground()onProgressUpdate()
![Page 18: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/18.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
onPreExecute()
protected void onPreExecute() {
// display a progress bar
// show a toast
}
17
![Page 19: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/19.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
doInBackground()
protected Bitmap doInBackground(String... query) {
// Get the bitmap
return bitmap;
}
18
![Page 20: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/20.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
onProgressUpdate()
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
19
![Page 21: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/21.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
onPostExecute()
protected void onPostExecute(Bitmap result) {
// Do something with the bitmap
}
20
![Page 22: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/22.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Start background work
public void loadImage (View view) {
String query = mEditText.getText().toString();
new MyAsyncTask(query).execute();
}
21
![Page 23: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/23.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
22
Limitations of AsyncTaskLimitations of AsyncTask
● When device configuration changes, Activity is destroyed
● AsyncTask cannot connect to Activity anymore
● New AsyncTask created for every config change
● Old AsyncTasks stay around
● App may run out of memory or crash
![Page 24: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/24.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
When to use AsyncTask
● Short or interruptible tasks
● Tasks that do not need to report back to UI or user
● Lower priority tasks that can be left unfinished
● Use AsyncTaskLoader otherwise
23
![Page 25: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/25.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Internet connection
24
![Page 26: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/26.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Steps to connect to the Internet
1. Add permissions to Android Manifest2. Check Network Connection3. Create Worker Thread4. Implement background task
a. Create URIb. Make HTTP Connectionc. Connect and GET Data
5. Process results a. Parse Results
25
![Page 27: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/27.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Permissions
26
![Page 28: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/28.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Permissions in AndroidManifest
Internet<uses-permission android:name="android.permission.INTERNET"/>
Check Network State<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
27
![Page 29: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/29.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Worker Thread
28
![Page 30: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/30.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Use Worker Thread
● AsyncTask—very short task, or no result returned to UI
● AsyncTaskLoader—for longer tasks, returns result to UI
● Background Service—covered in a later week
29
![Page 31: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/31.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Background work
In the background task (for example in doInBackground())
1. Create URI2. Make HTTP Connection3. Download Data
30
![Page 32: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/32.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Create URI
31
![Page 33: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/33.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
URI = Uniform Resource Identifier
String that names or locates a particular resource
● file://
● http:// and https://
● content://
32
![Page 34: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/34.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Sample URL for Google Books APIhttps://www.googleapis.com/books/v1/volumes?
q=pride+prejudice&maxResults=5&printType=books
Constants for Parameters
final String BASE_URL =
"https://www.googleapis.com/books/v1/volumes?";
final String QUERY_PARAM = "q";
final String MAX_RESULTS = "maxResults";
final String PRINT_TYPE = "printType";
33
![Page 35: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/35.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Build a URI for the request
Uri builtURI = Uri.parse(BASE_URL).buildUpon()
.appendQueryParameter(QUERY_PARAM, "pride+prejudice")
.appendQueryParameter(MAX_RESULTS, "10")
.appendQueryParameter(PRINT_TYPE, "books")
.build();
URL requestURL = new URL(builtURI.toString());
34
![Page 36: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/36.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
HTTP Client Connection
35
![Page 37: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/37.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
How to connect to the Internet?
● Use HttpURLConnection
● Must be done on a separate thread
● Requires InputStreams and try/catch blocks
36
Make a connection from scratch
![Page 38: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/38.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Create a HttpURLConnection
HttpURLConnection conn =
(HttpURLConnection) requestURL.openConnection();
37
![Page 39: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/39.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Configure connection
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
38
![Page 40: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/40.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Connect and get response
conn.connect();
int response = conn.getResponseCode();
InputStream is = conn.getInputStream();
String contentAsString = convertIsToString(is, len);
return contentAsString;
39
![Page 41: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/41.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Close connection and stream
} finally {
conn.disconnect();
if (is != null) {
is.close();
}
}
40
![Page 42: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/42.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Convert Response to
String
41
![Page 43: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/43.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Convert input stream into a stringpublic String convertIsToString(InputStream stream, int len)
throws IOException, UnsupportedEncodingException {
Reader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
42
![Page 44: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/44.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
BufferedReader is more efficientStringBuilder builder = new StringBuilder();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String line;while ((line = reader.readLine()) != null) { builder.append(line + "\n");}if (builder.length() == 0) { return null;}resultString = builder.toString();
43
![Page 45: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/45.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Parse Results
44
![Page 46: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/46.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Parsing the results
● Implement method to receive and handle results ( onPostExecute())
● Response is often JSON or XML
Parse results using helper classes
● JSONObject, JSONArray
● XMLPullParser—parses XML
45
![Page 47: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/47.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
JSON basics
{
"population":1,252,000,000,
"country":"India",
"cities":["New Delhi","Mumbai","Kolkata","Chennai"]
}
46
![Page 48: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/48.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
JSONObject basics
JSONObject jsonObject = new JSONObject(response);
String nameOfCountry = (String) jsonObject.get("country");
long population = (Long) jsonObject.get("population");
JSONArray listOfCities = (JSONArray) jsonObject.get("cities");
Iterator<String> iterator = listOfCities.iterator();
while (iterator.hasNext()) {
// do something
}
47
![Page 49: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/49.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Another JSON example{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}
48
![Page 50: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/50.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Another JSON exampleGet "onclick" value of the 3rd item in the "menuitem" array
JSONObject data = new JSONObject(responseString);
JSONArray menuItemArray =
data.getJSONArray("menuitem");
JSONObject thirdItem =
menuItemArray.getJSONObject(2);
String onClick = thirdItem.getString("onclick");
49
![Page 51: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/51.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Manage Network
Connection
50
![Page 52: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/52.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Getting Network information
51
● ConnectivityManager○ Answers queries about the state of network connectivity○ Notifies applications when network connectivity changes
● NetworkInfo○ Describes status of a network interface of a given type○ Mobile or Wi-Fi
![Page 53: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/53.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Check if network is available
52
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) { // Create background thread to connect and get data new DownloadWebpageTask().execute(stringUrl);} else { textView.setText("No network connection available.");}
![Page 54: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/54.jpg)
Internet connectionAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Check for WiFi & Mobile
53
NetworkInfo networkInfo =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isWifiConn = networkInfo.isConnected();
networkInfo =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isMobileConn = networkInfo.isConnected();
![Page 55: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/55.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Loaders
54
![Page 56: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/56.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
What is a Loader?
● Provides asynchronous loading of data
● Reconnects to Activity after configuration change
● Can monitor changes in data source and deliver new data
● Callbacks implemented in Activity
● Many types of loaders available○ AsyncTaskLoader, CursorLoader
55
![Page 57: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/57.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Why use loaders?
● Execute tasks OFF the UI thread
● LoaderManager handles configuration changes for you
● Efficiently implemented by the framework
● Users don't have to wait for data to load
56
![Page 58: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/58.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Anatomy of a Loader
● Manages loader functions via callbacks
● Can manage multiple loaders○ loader for database data, for AsyncTask data, for internet data…
57
What is a LoaderManager?
![Page 59: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/59.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Get a loader with initLoader()
● Creates and starts a loader, or reuses an existing one, including its data
● Use restartLoader() to clear data in existing loader
getLoaderManager().initLoader(Id, args, callback);
getLoaderManager().initLoader(0, null, this);
getSupportLoaderManager().initLoader(0, null, this);
58
![Page 60: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/60.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Implementing AsyncTaskLoade
r
59
![Page 61: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/61.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
AsyncTaskLoader Overview
60
LoaderManager
AsyncTaskLoader AsyncTask WorkToDo
Request Work
Receive Result
Activity
![Page 62: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/62.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
doInBackground()
onPostExecute()
loadInBackground()
onLoadFinished()
61
AsyncTask AsyncTaskLoader
![Page 63: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/63.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Steps for AsyncTaskLoader subclass
1. Subclass AsyncTaskLoader
2. Implement constructor
3. loadInBackground()
4. onStartLoading()
62
![Page 64: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/64.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Subclass AsyncTaskLoader
public static class StringListLoader
extends AsyncTaskLoader<List<String>> {
public StringListLoader(Context context, String queryString) {
super(context);
mQueryString = queryString;
}
}
63
![Page 65: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/65.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
loadInBackground()
public List<String> loadInBackground() {
List<String> data = new ArrayList<String>;
//TODO: Load the data from the network or from a database
return data;
}
64
![Page 66: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/66.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
onStartLoading()
When restartLoader() or initLoader() is called, the LoaderManager invokes the onStartLoading() callback
● Check for cached data● Start observing the data source (if needed)● Call forceLoad() to load the data if there are changes or
no cached data
protected void onStartLoading() { forceLoad(); }
65
![Page 67: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/67.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Implement loader callbacks in Activity
● onCreateLoader() — Create and return a new Loader for the given ID
● onLoadFinished() — Called when a previously created loader has finished its load
● onLoaderReset() — Called when a previously created loader is being reset making its data unavailable
66
![Page 68: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/68.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
onCreateLoader()
@Override
public Loader<List<String>> onCreateLoader(int id, Bundle args) {
return new StringListLoader(this,args.getString("queryString"));
}
67
![Page 69: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/69.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
onLoadFinished()
Results of loadInBackground() are passed to onLoadFinished() where you can display them
public void onLoadFinished(Loader<List<String>> loader,
List<String> data) {
mAdapter.setData(data);
}
68
![Page 70: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/70.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
onLoaderReset()
● Only called when loader is destroyed
● Leave blank most of the time
@Override
public void onLoaderReset(final LoaderList<String>> loader) { }
69
![Page 71: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/71.jpg)
AsyncTask and AsyncTaskLoaderAndroid Developer Fundamentals V2
This work is licensed under a Creative Commons Attribution 4.0 International License.
Get a loader with initLoader()
● In Activity
● Use support library to be compatible with more devices
getSupportLoaderManager().initLoader(0, null, this);
70
![Page 72: 5COSC005W MOBILE APPLICATION DEVELOPMENT Lecture 6 ...users.wmin.ac.uk/~dracopd/DOCUM/courses/5cosc005w/5cosc005… · This work is licensed under a Creative Commons Attribution 4.0](https://reader034.vdocuments.us/reader034/viewer/2022042401/5f107d2d7e708231d4495c1a/html5/thumbnails/72.jpg)
Sending Code to execute on the UI Thread
If a different thread would like to update the graphical components of ascreen (Views) it needs to do in the UI thread.
This can be done by sending the code for execution to the UI threadusing the runOnUiThread method found in the Activity class:
runOnUiThread(new Runnable (){
@Override
public void run(){
// code to be executed on UI thread
// i.e. widget updates
}
});
71