MCPcopy Index your code
hub / github.com/HendrixString/Android-Zorn

github.com/HendrixString/Android-Zorn @v1.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.0 ↗ · + Follow
190 symbols 348 edges 20 files 159 documented · 84%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Android-Zorn

Asynchronous Workers and Worker Managers for Android.

Android Arsenal

How to use

simply fork or download the project, you can also download and create .aar file yourself.

Notable Features

  • use Worker API as a replacement for AsyncTask
  • workers run on background threads and return callbacks on the main(calling) thread.
  • automate a batch of workers with two worker managers:
  • PriorityWorkerManager - workers are processed according to their priority both serially or unbounded.
  • TopologicalWorkerManager - workers are processed according to a binary topological relation and order.

Using a Worker

1. Simply anonymously instantiate AbstractWorker

AbstractWorker worker = new AbstractWorker() {
    @Override
    protected void onProgress() {
        // runs on the calling/main thread
    }

    @Override
    protected void onComplete() {
        // runs on the calling/main thread
    }

    @Override
    public void work() {
        // here you put work to be done in a background thread
    }
};

// run async
worker.process();

2. Simply extend AbstractWorker

MyWorker worker = new MyWorker();

worker.process(new WorkerObserver() {
    @Override
    public void onWorkerComplete(IWorker worker) {
        // runs on the calling/main thread
    }

    @Override
    public void onWorkerProgress(IWorker worker) {
        // runs on the calling/main thread
    }

    @Override
    public void onWorkerError(IWorker worker) {
        // runs on the calling/main thread
    }
});

3. use SimpleWorker with a IWork object (like Runnable)

SimpleWorker sw = new SimpleWorker(new IWork() {
    @Override
    public void work() {
        // here you put work to be done in a background thread
    }
});

sw.process();

notes

  • IWorker.process(..) method also have an overloaded version where one can pass ExecutorService
  • IWorker supports many more methods and ideas. I did not go through all.
  • in the future, I will add support for Java native FutureTask and Callable so worker can have cancelling feature.

Using a Worker Manager

Worker managers support a lot of functionality such as pause, start, stop etc.. You can also implement a Worker manager using BaseAbstractWorkerManager, it is very easy. Contributions of new Worker managers are most welcome.

Priority Worker Manager.

pm = new PriorityWorkerManager("myId");
// serial mode
pm.setExecutionMode(AbstractWorkerManager.EXECUTION_MODE.SERIAL);

IWorker worker = null;
String  id;
int     priority;

for(int ix = 0; ix < 20; ix++) {
    id        = String.valueOf(ix);
    priority  = ix;

    worker    = new TestWorker(id, priority);

    pm.enqueue(worker);
}

pm.setListener(new WorkerManagerObserver() {
    @Override
    public void onComplete(IWorkerManager wm) {
        // runs on the calling/main thread
    }

    @Override
    public void onProgress(String id) {
        // runs on the calling/main thread
    }

    @Override
    public void onError(WorkerManagerErrorInfo err) {
        // runs on the calling/main thread
    }
});

pm.start();

Topological Worker Manager.

Use the TopologicalWorkerManager.Builder or Zorn.newTopologicalWorkerManager() to create a worker manager that takes into account a directed binary relation among workers.

TestWorker a1 = new TestWorker("a1");
TestWorker a2 = new TestWorker("a2");
TestWorker a3 = new TestWorker("a3");
TestWorker a4 = new TestWorker("a4");
TestWorker a5 = new TestWorker("a5");

TopologicalWorkerManager tm = new TopologicalWorkerManager.Builder().id("topological_test")
                                                          .listener(this)
                                                          .before(a1, a3)
                                                          .before(a2, a3)
                                                          .after(a4, a3)
                                                          .after(a5, a4)
                                                          .build();

tm.setListener(...);

tm.start();                                                          

Dependencies

Terms

Contact Author

Extension points exported contracts — how you extend this code

IDisposable (Interface)
(no doc) [7 implementers]
src/main/java/com/hendrix/zorn/interfaces/IDisposable.java
IWorker (Interface)
interface for worker @author Tomer Shalev [2 implementers]
src/main/java/com/hendrix/zorn/workers/IWorker.java
WorkerObserver (Interface)
callback interface for IWorker @see IWorker [2 implementers]
src/main/java/com/hendrix/zorn/workers/WorkerObserver.java
IWork (Interface)
@author Tomer Shalev [2 implementers]
src/main/java/com/hendrix/zorn/interfaces/IWork.java
IWorkable (Interface)
@author Tomer Shalev [1 implementers]
src/main/java/com/hendrix/zorn/interfaces/IWorkable.java

Core symbols most depended-on inside this repo

getStatusInfo
called by 15
src/main/java/com/hendrix/zorn/managers/AbstractWorkerManager.java
getRunningWorkers
called by 10
src/main/java/com/hendrix/zorn/managers/AbstractWorkerManager.java
setStatus
called by 6
src/main/java/com/hendrix/zorn/managers/WorkerManagerStatus.java
getStatus
called by 5
src/main/java/com/hendrix/zorn/managers/WorkerManagerStatus.java
isRunning
called by 5
src/main/java/com/hendrix/zorn/managers/AbstractWorkerManager.java
getFailedWorkers
called by 5
src/main/java/com/hendrix/zorn/managers/AbstractWorkerManager.java
add
called by 5
src/main/java/com/hendrix/zorn/workers/SyncChainWorker.java
vertexOf
called by 4
src/main/java/com/hendrix/zorn/managers/TopologicalWorkerManager.java

Shape

Method 163
Class 14
Interface 9
Enum 4

Languages

Java100%

Modules by API surface

src/main/java/com/hendrix/zorn/managers/AbstractWorkerManager.java35 symbols
src/main/java/com/hendrix/zorn/workers/AbstractWorker.java29 symbols
src/main/java/com/hendrix/zorn/managers/IWorkerManager.java22 symbols
src/main/java/com/hendrix/zorn/managers/TopologicalWorkerManager.java15 symbols
src/main/java/com/hendrix/zorn/managers/BaseAbstractWorkerManager.java12 symbols
src/main/java/com/hendrix/zorn/managers/WorkerManagerErrorInfo.java10 symbols
src/main/java/com/hendrix/zorn/managers/WorkerManagerStatus.java9 symbols
src/main/java/com/hendrix/zorn/managers/PriorityWorkerManager.java9 symbols
src/main/java/com/hendrix/zorn/workers/SyncChainWorker.java7 symbols
src/main/java/com/hendrix/zorn/workers/SimpleWorker.java6 symbols
src/main/java/com/hendrix/zorn/interfaces/IWorkable.java6 symbols
src/main/java/com/hendrix/zorn/Zorn.java6 symbols

For agents

$ claude mcp add Android-Zorn \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact