1// 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_THREADING_JAVA_THREAD_H_ 6#define BASE_THREADING_JAVA_THREAD_H_ 7 8#include <jni.h> 9 10#include "base/android/scoped_java_ref.h" 11#include "base/memory/scoped_ptr.h" 12 13namespace base { 14 15class MessageLoop; 16class WaitableEvent; 17 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, jobject obj, jlong event); 37 38 static bool RegisterBindings(JNIEnv* env); 39 40 private: 41 scoped_ptr<base::MessageLoop> message_loop_; 42 ScopedJavaGlobalRef<jobject> java_thread_; 43}; 44 45} // namespace android 46} // namespace base 47 48#endif // BASE_THREADING_JAVA_THREAD_H_ 49