Khi dịch vụ TaintDroidNotifyService được chạy, các module đăng ký dịch vụ có thể nhận được các taint đang được ứng dụng truy cập và gửi đi theo luồng. Module sẽ chuẩn bị các luật của chính sách, gửi kèm thông tin về taint để xử lý.
Dịch vụ thông báo TaintDroid được mở rộng từ dịch vụ Android, nên nó sẽ lắng nghe tất các dữ liệu trong hàng đợi của HĐH. Dữ liệu trong hàng đợi đều được định nghĩa theo cấu trúc theo lớp hàng đợi của Android. Mỗi khi có khối hàng đợi được truyền đi, TaintDroid sẽ lấy dữ liệu bằng phương thức take() của lớp Queue. Như vậy mỗi hàng đợi block điều được TaintDroid xử lý và khóa theo taint đã định nghĩa để thông báo cho người dùng khi cần thiết. Dưới đây là đoạn mã chương trình minh họa xử lý trên.
Với mỗi hàng đợi nhận được từ HĐH, TaintDroid sẽ chuyển đổi sang thực thể LogEntry định nghĩa riêng để xử lý. Hệ thống sẽ trích xuất ra thông điệp, thời gian hay id tiến trình từ hàng đợi. Sau đó sẽ lọc ra các thông tin cụ thể từ thông điệp như : Ip, Taint, Data, … và dưới đây là hỉnh ảnh minh họa một phần phương thức xử lý LogEntry.
Như vậy mỗi module mới cần xử lý taint cho riêng mình thì cần phải mở rộng lớp Consumer của dịch vụ TaintDroidNotifyService và lấy taint để xử lý riêng cho module đó. Module mới có thể lấy được thông tin taint vì lớp Consumer thực thi giao diện Runnable của gói dịch vụ Android. Để thực hiện việc này ta cần sửa lại lớp Consumer để hỗ trợ các module khác có thể mở rộng lớp trên như hình minh họa sau:
Về tổng thể một module mới khi được gắn vào dịch vụ của TaintDroid thì phải mở rộng nó, thực thi logic riêng của mình và dưới đây là hình ảnh minh họa luồng xử lý cho mỗi module mới.
Hình 3.6. Luồng xử lý taint của module thực thi