[main]: Add mdp to lecture notes

This commit is contained in:
John Gatward committed 2026-10-08 13:07:18 +01:00
1 parent 283096a43d
commit 4f85b781ea
70 files changed
+2759

No files matched your search

+78
View File
@@ -0,0 +1,78 @@
# Threads (and Services)
Activities are regularly transitioned to the background
* i.e. when they are stopped or destroyed
* As the user continues with the *task*
### Thread of Execution
Android applications use a **single thread model**
* A single thread of execution called *main*
* Started when a *process* is created
* Handles and dispatches user interface events
* Drawing the interface, responding to `onClick()`
* Handles activity life cycle events
* `onCreate()`, `onDestroy()`
* For all components in an application
### Looper and Handler
`HandlerThread` - extension of thread with support for looper
**Looper**
* Each `HandlerThread` can have one looper
* A Java thread dies when the run method returns
* Maintains a message queue
* `looper.loop()` - loops through the message queue and processes waiting messages
**Message**
* A task to be completed
* Might contain data or a reference to a `Runnable` object
**Handler**
* Attached to a looper
* Enqueues messages in the looper message queue
* Handles messages from the message queue
* **Thread-safe**
* One looper can have many handlers associated with it
![img](img/m.png)
If we run code that takes >5 s, the application will appear to hang.
* Put longer-running / non-instantaneous code in a separate thread of execution
* Network access, file access
* 2 rules
1. Do not block the UI thread
2. Do not access the UI thread from outside the UI thread
- Android view objects are not thread-safe
- *Post* messages via the Handler to the UI thread's looper
We can programmatically interact with UI components
- e.g. `textField.setText(string)`
- But cannot call this method from outside the UI thread (rule 2)
Instead, split code into two parts
1. Long(ish)-running code that *does not* involve the UI
2. Instantaneous code that *does* involve the UI
- Which needs to be posted to the UI thread responsible for the view
We need to remember the activity life-cycle; otherwise, we risk having **orphaned threads**.
#### AsyncTask and others
###### Accessing the UI thread from another thread
```java
Activity.runOnUiThread(Runnable);
View.post(Runnable);
View.postDelayed(Runnable, long);
MutableLiveData.postValue;
```