{"id":29585674,"url":"https://github.com/hendrixstring/android-zorn","last_synced_at":"2025-07-20T02:16:33.975Z","repository":{"id":88706071,"uuid":"40300693","full_name":"HendrixString/Android-Zorn","owner":"HendrixString","description":"Async Workers and Worker managers for Android","archived":false,"fork":false,"pushed_at":"2016-02-22T07:56:42.000Z","size":135,"stargazers_count":87,"open_issues_count":0,"forks_count":11,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-05-16T10:47:39.826Z","etag":null,"topics":["android","android-zorn","worker-manager"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HendrixString.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-08-06T11:10:28.000Z","updated_at":"2023-03-27T11:25:35.000Z","dependencies_parsed_at":"2023-05-06T07:33:04.798Z","dependency_job_id":null,"html_url":"https://github.com/HendrixString/Android-Zorn","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/HendrixString/Android-Zorn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HendrixString%2FAndroid-Zorn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HendrixString%2FAndroid-Zorn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HendrixString%2FAndroid-Zorn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HendrixString%2FAndroid-Zorn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HendrixString","download_url":"https://codeload.github.com/HendrixString/Android-Zorn/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HendrixString%2FAndroid-Zorn/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266057347,"owners_count":23870131,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-zorn","worker-manager"],"created_at":"2025-07-20T02:16:30.356Z","updated_at":"2025-07-20T02:16:33.959Z","avatar_url":"https://github.com/HendrixString.png","language":"Java","readme":"# Android-Zorn\nAsynchronous Workers and Worker Managers for Android.\n\n[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-Android--Zorn-green.svg?style=flat)](https://android-arsenal.com/details/1/2291)\n\n## How to use\nsimply fork or download the project, you can also download and create `.aar` file yourself.\n\n### Notable Features\n* use `Worker` API as a replacement for `AsyncTask`\n* workers run on background threads and return callbacks on the main(calling) thread.\n* automate a batch of workers with two worker managers:\n  * `PriorityWorkerManager` - workers are processed according to their priority both serially or unbounded.\n  * `TopologicalWorkerManager` - workers are processed according to a binary topological relation and order.\n\n### Using a Worker\n#### 1. Simply anonymously instantiate `AbstractWorker`\n\n```java\nAbstractWorker worker = new AbstractWorker() {\n    @Override\n    protected void onProgress() {\n        // runs on the calling/main thread\n    }\n\n    @Override\n    protected void onComplete() {\n        // runs on the calling/main thread\n    }\n\n    @Override\n    public void work() {\n        // here you put work to be done in a background thread\n    }\n};\n\n// run async\nworker.process();\n\n```\n#### 2. Simply extend `AbstractWorker`\n\n```java\nMyWorker worker = new MyWorker();\n\nworker.process(new WorkerObserver() {\n    @Override\n    public void onWorkerComplete(IWorker worker) {\n        // runs on the calling/main thread\n    }\n\n    @Override\n    public void onWorkerProgress(IWorker worker) {\n        // runs on the calling/main thread\n    }\n\n    @Override\n    public void onWorkerError(IWorker worker) {\n        // runs on the calling/main thread\n    }\n});\n\n```\n\n#### 3. use `SimpleWorker` with a `IWork` object (like `Runnable`)\n\n```java\nSimpleWorker sw = new SimpleWorker(new IWork() {\n    @Override\n    public void work() {\n        // here you put work to be done in a background thread\n    }\n});\n\nsw.process();\n\n```\n\n####  notes\n* `IWorker.process(..)` method also have an overloaded version where one can pass `ExecutorService`\n* `IWorker` supports many more methods and ideas. I did not go through all.\n* in the future, I will add support for Java native `FutureTask` and `Callable` so worker can have cancelling feature.\n\n### Using a Worker Manager\nWorker managers support a lot of functionality such as pause, start, stop etc..\nYou can also implement a Worker manager using `BaseAbstractWorkerManager`, it is very easy.\nContributions of new Worker managers are most welcome.\n\n#### Priority Worker Manager.\n```java\npm = new PriorityWorkerManager(\"myId\");\n// serial mode\npm.setExecutionMode(AbstractWorkerManager.EXECUTION_MODE.SERIAL);\n\nIWorker worker = null;\nString  id;\nint     priority;\n\nfor(int ix = 0; ix \u003c 20; ix++) {\n    id        = String.valueOf(ix);\n    priority  = ix;\n    \n    worker    = new TestWorker(id, priority);\n\n    pm.enqueue(worker);\n}\n\npm.setListener(new WorkerManagerObserver() {\n    @Override\n    public void onComplete(IWorkerManager wm) {\n        // runs on the calling/main thread\n    }\n\n    @Override\n    public void onProgress(String id) {\n        // runs on the calling/main thread\n    }\n\n    @Override\n    public void onError(WorkerManagerErrorInfo err) {\n        // runs on the calling/main thread\n    }\n});\n\npm.start();\n```\n\n#### Topological Worker Manager.\nUse the `TopologicalWorkerManager.Builder` or `Zorn.newTopologicalWorkerManager()`\nto create a worker manager that takes into account a directed binary relation among workers.\n```java\nTestWorker a1 = new TestWorker(\"a1\");\nTestWorker a2 = new TestWorker(\"a2\");\nTestWorker a3 = new TestWorker(\"a3\");\nTestWorker a4 = new TestWorker(\"a4\");\nTestWorker a5 = new TestWorker(\"a5\");\n\nTopologicalWorkerManager tm = new TopologicalWorkerManager.Builder().id(\"topological_test\")\n                                                          .listener(this)\n                                                          .before(a1, a3)\n                                                          .before(a2, a3)\n                                                          .after(a4, a3)\n                                                          .after(a5, a4)\n                                                          .build();\n                                                          \ntm.setListener(...);\n\ntm.start();                                                          \n```\n\n\n\n### Dependencies\n* [`Erdos`](https://github.com/HendrixString/Erdos-Graph-framework)\n\n### Terms\n* completely free source code. [Apache License, Version 2.0.](http://www.apache.org/licenses/LICENSE-2.0)\n* if you like it -\u003e star or share it with others\n\n### Contact Author\n* [tomer.shalev@gmail.com](tomer.shalev@gmail.com)\n* [Google+ TomershalevMan](https://plus.google.com/+TomershalevMan/about)\n* [Facebook - HendrixString](https://www.facebook.com/HendrixString)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhendrixstring%2Fandroid-zorn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhendrixstring%2Fandroid-zorn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhendrixstring%2Fandroid-zorn/lists"}