blob: 96f2f0a1dcfee7657285eb9d11c5a408d6283671 [file] [log] [blame]
Luis Hector Chavez645501c2016-12-28 10:56:26 -08001// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_ANDROID_JAVA_HANDLER_THREAD_H_
6#define BASE_ANDROID_JAVA_HANDLER_THREAD_H_
7
8#include <jni.h>
9
10#include <memory>
11
12#include "base/android/scoped_java_ref.h"
13
14namespace base {
15
16class MessageLoop;
Luis Hector Chavez645501c2016-12-28 10:56:26 -080017
18namespace android {
19
20// A Java Thread with a native message loop. To run tasks, post them
21// to the message loop and they will be scheduled along with Java tasks
22// on the thread.
23// This is useful for callbacks where the receiver expects a thread
24// with a prepared Looper.
25class BASE_EXPORT JavaHandlerThread {
26 public:
27 JavaHandlerThread(const char* name);
28 virtual ~JavaHandlerThread();
29
30 base::MessageLoop* message_loop() const { return message_loop_.get(); }
31 void Start();
32 void Stop();
33
34 // Called from java on the newly created thread.
35 // Start() will not return before this methods has finished.
36 void InitializeThread(JNIEnv* env,
37 const JavaParamRef<jobject>& obj,
38 jlong event);
39 void StopThread(JNIEnv* env,
40 const JavaParamRef<jobject>& obj,
41 jlong event);
42
Jay Civelli8ac91032017-03-29 16:17:00 -070043 virtual void StartMessageLoop();
44 virtual void StopMessageLoop();
45
Luis Hector Chavez645501c2016-12-28 10:56:26 -080046 static bool RegisterBindings(JNIEnv* env);
47
Jay Civelli8ac91032017-03-29 16:17:00 -070048 protected:
Luis Hector Chavez645501c2016-12-28 10:56:26 -080049 std::unique_ptr<base::MessageLoop> message_loop_;
Jay Civelli8ac91032017-03-29 16:17:00 -070050
51 private:
Luis Hector Chavez645501c2016-12-28 10:56:26 -080052 ScopedJavaGlobalRef<jobject> java_thread_;
53};
54
55} // namespace android
56} // namespace base
57
58#endif // BASE_ANDROID_JAVA_HANDLER_THREAD_H_