Loading core/java/android/os/Looper.java +36 −33 Original line number Diff line number Diff line Loading @@ -17,7 +17,9 @@ package android.os; import android.util.Config; import android.util.Log; import android.util.Printer; import android.util.PrefixPrinter; /** * Class used to run a message loop for a thread. Threads by default do Loading Loading @@ -50,17 +52,18 @@ import android.util.Printer; * }</pre> */ public class Looper { private static final boolean DEBUG = false; private static final boolean localLOGV = DEBUG ? Config.LOGD : Config.LOGV; private static final String TAG = "Looper"; private static final boolean LOG_V = Log.isLoggable(TAG, Log.VERBOSE); // sThreadLocal.get() will return null unless you've called prepare(). private static final ThreadLocal sThreadLocal = new ThreadLocal(); private static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); final MessageQueue mQueue; final Thread mThread; volatile boolean mRun; Thread mThread; private Printer mLogging = null; private static Looper mMainLooper = null; private static Looper mMainLooper = null; // guarded by Looper.class /** Initialize the current thread as a looper. * This gives you a chance to create handlers that then reference Loading @@ -75,12 +78,12 @@ public class Looper { sThreadLocal.set(new Looper()); } /** Initialize the current thread as a looper, marking it as an application's main * looper. The main looper for your application is created by the Android environment, * so you should never need to call this function yourself. * {@link #prepare()} /** * Initialize the current thread as a looper, marking it as an * application's main looper. The main looper for your application * is created by the Android environment, so you should never need * to call this function yourself. See also: {@link #prepare()} */ public static final void prepareMainLooper() { prepare(); setMainLooper(myLooper()); Loading @@ -105,12 +108,12 @@ public class Looper { */ public static final void loop() { Looper me = myLooper(); if (me == null) { throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread."); } MessageQueue queue = me.mQueue; while (true) { Message msg = queue.next(); // might block //if (!me.mRun) { // break; //} if (msg != null) { if (msg.target == null) { // No target is a magic identifier for the quit message. Loading @@ -134,7 +137,7 @@ public class Looper { * null if the calling thread is not associated with a Looper. */ public static final Looper myLooper() { return (Looper)sThreadLocal.get(); return sThreadLocal.get(); } /** Loading Loading @@ -186,21 +189,22 @@ public class Looper { } public void dump(Printer pw, String prefix) { pw.println(prefix + this); pw.println(prefix + "mRun=" + mRun); pw.println(prefix + "mThread=" + mThread); pw.println(prefix + "mQueue=" + ((mQueue != null) ? mQueue : "(null")); pw = PrefixPrinter.create(pw, prefix); pw.println(this.toString()); pw.println("mRun=" + mRun); pw.println("mThread=" + mThread); pw.println("mQueue=" + ((mQueue != null) ? mQueue : "(null")); if (mQueue != null) { synchronized (mQueue) { long now = SystemClock.uptimeMillis(); Message msg = mQueue.mMessages; int n = 0; while (msg != null) { pw.println(prefix + " Message " + n + ": " + msg.toString(now)); pw.println(" Message " + n + ": " + msg.toString(now)); n++; msg = msg.next; } pw.println(prefix + "(Total messages: " + n + ")"); pw.println("(Total messages: " + n + ")"); } } } Loading @@ -226,4 +230,3 @@ public class Looper { } } } core/java/android/util/PrefixPrinter.java 0 → 100644 +50 −0 Original line number Diff line number Diff line /* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.util; /** * PrefixPrinter is a Printer which prefixes all lines with a given * prefix. * * @hide */ public class PrefixPrinter implements Printer { private final Printer mPrinter; private final String mPrefix; /** * Creates a new PrefixPrinter. * * <p>If prefix is null or empty, the provided printer is returned, rather * than making a prefixing printer. */ public static Printer create(Printer printer, String prefix) { if (prefix == null || prefix.equals("")) { return printer; } return new PrefixPrinter(printer, prefix); } private PrefixPrinter(Printer printer, String prefix) { mPrinter = printer; mPrefix = prefix; } public void println(String str) { mPrinter.println(mPrefix + str); } } Loading
core/java/android/os/Looper.java +36 −33 Original line number Diff line number Diff line Loading @@ -17,7 +17,9 @@ package android.os; import android.util.Config; import android.util.Log; import android.util.Printer; import android.util.PrefixPrinter; /** * Class used to run a message loop for a thread. Threads by default do Loading Loading @@ -50,17 +52,18 @@ import android.util.Printer; * }</pre> */ public class Looper { private static final boolean DEBUG = false; private static final boolean localLOGV = DEBUG ? Config.LOGD : Config.LOGV; private static final String TAG = "Looper"; private static final boolean LOG_V = Log.isLoggable(TAG, Log.VERBOSE); // sThreadLocal.get() will return null unless you've called prepare(). private static final ThreadLocal sThreadLocal = new ThreadLocal(); private static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); final MessageQueue mQueue; final Thread mThread; volatile boolean mRun; Thread mThread; private Printer mLogging = null; private static Looper mMainLooper = null; private static Looper mMainLooper = null; // guarded by Looper.class /** Initialize the current thread as a looper. * This gives you a chance to create handlers that then reference Loading @@ -75,12 +78,12 @@ public class Looper { sThreadLocal.set(new Looper()); } /** Initialize the current thread as a looper, marking it as an application's main * looper. The main looper for your application is created by the Android environment, * so you should never need to call this function yourself. * {@link #prepare()} /** * Initialize the current thread as a looper, marking it as an * application's main looper. The main looper for your application * is created by the Android environment, so you should never need * to call this function yourself. See also: {@link #prepare()} */ public static final void prepareMainLooper() { prepare(); setMainLooper(myLooper()); Loading @@ -105,12 +108,12 @@ public class Looper { */ public static final void loop() { Looper me = myLooper(); if (me == null) { throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread."); } MessageQueue queue = me.mQueue; while (true) { Message msg = queue.next(); // might block //if (!me.mRun) { // break; //} if (msg != null) { if (msg.target == null) { // No target is a magic identifier for the quit message. Loading @@ -134,7 +137,7 @@ public class Looper { * null if the calling thread is not associated with a Looper. */ public static final Looper myLooper() { return (Looper)sThreadLocal.get(); return sThreadLocal.get(); } /** Loading Loading @@ -186,21 +189,22 @@ public class Looper { } public void dump(Printer pw, String prefix) { pw.println(prefix + this); pw.println(prefix + "mRun=" + mRun); pw.println(prefix + "mThread=" + mThread); pw.println(prefix + "mQueue=" + ((mQueue != null) ? mQueue : "(null")); pw = PrefixPrinter.create(pw, prefix); pw.println(this.toString()); pw.println("mRun=" + mRun); pw.println("mThread=" + mThread); pw.println("mQueue=" + ((mQueue != null) ? mQueue : "(null")); if (mQueue != null) { synchronized (mQueue) { long now = SystemClock.uptimeMillis(); Message msg = mQueue.mMessages; int n = 0; while (msg != null) { pw.println(prefix + " Message " + n + ": " + msg.toString(now)); pw.println(" Message " + n + ": " + msg.toString(now)); n++; msg = msg.next; } pw.println(prefix + "(Total messages: " + n + ")"); pw.println("(Total messages: " + n + ")"); } } } Loading @@ -226,4 +230,3 @@ public class Looper { } } }
core/java/android/util/PrefixPrinter.java 0 → 100644 +50 −0 Original line number Diff line number Diff line /* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.util; /** * PrefixPrinter is a Printer which prefixes all lines with a given * prefix. * * @hide */ public class PrefixPrinter implements Printer { private final Printer mPrinter; private final String mPrefix; /** * Creates a new PrefixPrinter. * * <p>If prefix is null or empty, the provided printer is returned, rather * than making a prefixing printer. */ public static Printer create(Printer printer, String prefix) { if (prefix == null || prefix.equals("")) { return printer; } return new PrefixPrinter(printer, prefix); } private PrefixPrinter(Printer printer, String prefix) { mPrinter = printer; mPrefix = prefix; } public void println(String str) { mPrinter.println(mPrefix + str); } }