- Class Handler
- Constructor Summary
- Method Summary
- Methods declared in class java.lang.Object
- Constructor Details
- Handler
- Method Details
- publish
- flush
- close
- setFormatter
- getFormatter
- setEncoding
- getEncoding
- setFilter
- getFilter
- setErrorManager
- getErrorManager
- reportError
- setLevel
- getLevel
- isLoggable
- Java handler что это
- Constructor Summary
- Method Summary
- Methods inherited from class java.lang.Object
- Constructor Detail
- Handler
- Method Detail
- publish
- flush
- close
- setFormatter
- getFormatter
- setEncoding
- getEncoding
- setFilter
- getFilter
- setErrorManager
- getErrorManager
- reportError
- setLevel
- getLevel
- isLoggable
- Класс Handler
- Пример с индикатором прогресса
- Splash-screen
Class Handler
A Handler object takes log messages from a Logger and exports them. It might for example, write them to a console or write them to a file, or send them to a network logging service, or forward them to an OS log, or whatever.
A Handler can be disabled by doing a setLevel(Level.OFF) and can be re-enabled by doing a setLevel with an appropriate level.
Handler classes typically use LogManager properties to set default values for the Handler ‘s Filter , Formatter , and Level . See the specific documentation for each concrete Handler class.
Constructor Summary
Method Summary
Methods declared in class java.lang.Object
Constructor Details
Handler
Default constructor. The resulting Handler has a log level of Level.ALL , no Formatter , and no Filter . A default ErrorManager instance is installed as the ErrorManager .
Method Details
publish
Publish a LogRecord . The logging request was made initially to a Logger object, which initialized the LogRecord and forwarded it here. The Handler is responsible for formatting the message, when and if necessary. The formatting should include localization.
flush
close
Close the Handler and free all associated resources. The close method will perform a flush and then close the Handler . After close has been called this Handler should no longer be used. Method calls may either be silently ignored or may throw runtime exceptions.
setFormatter
Set a Formatter . This Formatter will be used to format LogRecords for this Handler . Some Handlers may not use Formatters , in which case the Formatter will be remembered, but not used.
getFormatter
setEncoding
Set the character encoding used by this Handler . The encoding should be set before any LogRecords are written to the Handler .
getEncoding
setFilter
Set a Filter to control output on this Handler . For each call of publish the Handler will call this Filter (if it is non-null) to check if the LogRecord should be published or discarded.
getFilter
setErrorManager
Define an ErrorManager for this Handler. The ErrorManager’s «error» method will be invoked if any errors occur while using this Handler.
getErrorManager
reportError
Protected convenience method to report an error to this Handler’s ErrorManager. Note that this method retrieves and uses the ErrorManager without doing a security check. It can therefore be used in environments where the caller may be non-privileged.
setLevel
Set the log level specifying which message levels will be logged by this Handler . Message levels lower than this value will be discarded. The intention is to allow developers to turn on voluminous logging, but to limit the messages that are sent to certain Handlers .
getLevel
Get the log level specifying which messages will be logged by this Handler . Message levels lower than this level will be discarded.
isLoggable
Check if this Handler would actually log a given LogRecord . This method checks if the LogRecord has an appropriate Level and whether it satisfies any Filter . It also may make other Handler specific checks that might prevent a handler from logging the LogRecord . It will return false if the LogRecord is null.
Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples. Other versions.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2023, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.
Java handler что это
A Handler object takes log messages from a Logger and exports them. It might for example, write them to a console or write them to a file, or send them to a network logging service, or forward them to an OS log, or whatever. A Handler can be disabled by doing a setLevel(Level.OFF) and can be re-enabled by doing a setLevel with an appropriate level. Handler classes typically use LogManager properties to set default values for the Handler‘s Filter, Formatter, and Level. See the specific documentation for each concrete Handler class.
Constructor Summary
Method Summary
Methods inherited from class java.lang.Object
Constructor Detail
Handler
Default constructor. The resulting Handler has a log level of Level.ALL, no Formatter, and no Filter. A default ErrorManager instance is installed as the ErrorManager.
Method Detail
publish
Publish a LogRecord. The logging request was made initially to a Logger object, which initialized the LogRecord and forwarded it here. The Handler is responsible for formatting the message, when and if necessary. The formatting should include localization.
flush
public abstract void flush()
close
Close the Handler and free all associated resources. The close method will perform a flush and then close the Handler. After close has been called this Handler should no longer be used. Method calls may either be silently ignored or may throw runtime exceptions.
setFormatter
public void setFormatter(Formatter newFormatter) throws SecurityException
Set a Formatter. This Formatter will be used to format LogRecords for this Handler. Some Handlers may not use Formatters, in which case the Formatter will be remembered, but not used.
getFormatter
setEncoding
public void setEncoding(String encoding) throws SecurityException, UnsupportedEncodingException
Set the character encoding used by this Handler. The encoding should be set before any LogRecords are written to the Handler.
getEncoding
setFilter
public void setFilter(Filter newFilter) throws SecurityException
Set a Filter to control output on this Handler. For each call of publish the Handler will call this Filter (if it is non-null) to check if the LogRecord should be published or discarded.
getFilter
setErrorManager
Define an ErrorManager for this Handler. The ErrorManager’s «error» method will be invoked if any errors occur while using this Handler.
getErrorManager
reportError
protected void reportError(String msg, Exception ex, int code)
Protected convenience method to report an error to this Handler’s ErrorManager. Note that this method retrieves and uses the ErrorManager without doing a security check. It can therefore be used in environments where the caller may be non-privileged.
setLevel
public void setLevel(Level newLevel) throws SecurityException
Set the log level specifying which message levels will be logged by this Handler. Message levels lower than this value will be discarded. The intention is to allow developers to turn on voluminous logging, but to limit the messages that are sent to certain Handlers.
getLevel
Get the log level specifying which messages will be logged by this Handler. Message levels lower than this level will be discarded.
isLoggable
Check if this Handler would actually log a given LogRecord. This method checks if the LogRecord has an appropriate Level and whether it satisfies any Filter. It also may make other Handler specific checks that might prevent a handler from logging the LogRecord. It will return false if the LogRecord is null.
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2023, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.
Класс Handler
Класс android.os.Handler является дальнейшим развитием потоков, упрощающий код. Handler может использоваться для планирования выполнения кода в некоторый момент в будущем. Также класс может использоваться для передачи кода, который должен выполняться в другом программном потоке.
Рассмотрим максимально простой пример для знакомства
private Handler mHandler; boolean gameOn; long startTime; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startTime = System.currentTimeMillis(); mHandler = new Handler()< public void handleMessage(Message msg)< super.handleMessage(msg); if(gameOn) < long seconds = ((System.currentTimeMillis() - startTime)) / 1000; Log.i("info", "seconds text-warning">Периодическое выполнение задачи При сложных вычислениях может понадобиться очередь Runnable-объектов. Помещая объект в очередь, вы можете задать время его запуска. Для демонстрации использования обработчика потока напишем программу, запускающую фоновый процесс, который будет каждые 200 миллисекунд получать текущее время и обновлять текст. Нам понадобится кнопка Пуск и две текстовые метки, в которых будет отображаться время и количество нажатий кнопки:
package ru.alexanderklimov.handler; import android.os.Bundle; import android.os.Handler; import android.os.SystemClock; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity < // считаем нажатия кнопки private int mButtonPressed = 0; // счетчик времени private long mTime = 0L; private TextView mCounterTextView; private TextView mTimeTextView; // обработчик потока - обновляет сведения о времени // Создаётся в основном UI-потоке private Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTimeTextView = (TextView) findViewById(R.id.textViewTime); mCounterTextView = (TextView) findViewById(R.id.textViewCounter); if (mTime == 0L) < mTime = SystemClock.uptimeMillis(); mHandler.removeCallbacks(timeUpdaterRunnable); // Добавляем Runnable-объект timeUpdaterRunnable в очередь // сообщений, объект должен быть запущен после задержки в 100 мс mHandler.postDelayed(timeUpdaterRunnable, 100); >> // Описание Runnable-объекта private Runnable timeUpdaterRunnable = new Runnable() < public void run() < // вычисляем время final long start = mTime; long millis = SystemClock.uptimeMillis() - start; int second = (int) (millis / 1000); int min = second / 60; second = second % 60; // выводим время mTimeTextView.setText("" + min + ":" + String.format("%02d", second)); // повторяем через каждые 200 миллисекунд mHandler.postDelayed(this, 200); >>; @Override protected void onPause() < // Удаляем Runnable-объект для прекращения задачи mHandler.removeCallbacks(timeUpdaterRunnable); super.onPause(); >@Override protected void onResume() < super.onResume(); // Добавляем Runnable-объект mHandler.postDelayed(timeUpdaterRunnable, 100); >public void onClick(View v) < mCounterTextView.setText("" + ++mButtonPressed); >>
На экране будет отображаться время и одновременно мы можем нажимать на кнопку. Эти действия не мешают друг другу, так как работают в разных потоках.
Кроме метода postDelayed() вы можете использовать метод postAtTime():
postAtTime(Runnable r, long uptimeMillis)
В этом случае объект r добавляется в очередь сообщений, запуск объекта производится во время, заданное вторым параметром.
Самый простой способ помещения объекта в очередь - метод post(), когда указывается только помещаемый объект без указания времени выполнения объекта:
Пример с индикатором прогресса
Всё, что вам нужно - создать экземпляр класса Handler в классе активности. Поток будет работать с объектом Handler, который в свою очередь, будет обновлять шкалу индикатора в основном потоке активности.
Чтобы послать сообщение в объект Handler, сначала необходимо вызвать метод obtainMessage(), чтобы извлечь объект Message из глобального пула сообщений.
Для вставки сообщения в очередь сообщений объекта Handler существует несколько методов:
- sendMessage() — помещает сообщение в очередь немедленно (в конец очереди)
- sendMessageAtFrontofQueue() — помещает сообщение в очередь немедленно и, кроме того, помещает это сообщение впереди очереди (по умолчанию оно ставится в конец очереди), таким образом ваше сообщение берет приоритет над всеми другими
- sendMessageAtTime() — помещает сообщение в очередь в установленное время в миллисекундах
- sendMessageDeiayed() — помещает сообщение в очередь после задержки, выраженной в миллисекундах
Чтобы обрабатывать эти сообщения, для объекта Handler необходимо реализовать метод обратного вызова handleMessage(), который будет вызываться каждым сообщением из очереди сообщения.
Для примера создадим приложение с ProgressBar, который будет отображать ход выполнения длительной задачи (это будет простой цикл с приостановкой потока на 1 секунду в каждой итерации цикла) и обновлять степень завершения этой задачи через объект Handler в классе активности.
package ru.alexanderklimov.progressbar; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.ProgressBar; public class ProgressBarDemoActivity extends Activity < ProgressBar mProgressBar; int mProgress = 0; @Override public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mProgressBar = (ProgressBar) findViewById(R.id.progressBarHorizontal); new Thread(myThread).start(); >private Runnable myThread = new Runnable() < @Override public void run() < while (mProgress < 100) < try < myHandler.sendMessage(myHandler.obtainMessage()); Thread.sleep(1000); >catch (Throwable t) < >> > Handler myHandler = new Handler() < @Override public void handleMessage(Message msg) < mProgress++; mProgressBar.setProgress(mProgress); >>; >; >
Splash-screen
Очень часто программисты используют Handler для реализации окна приветствия, которое автоматически закрывается и следом запускается основная активность игры или приложения.
public classSplashActivity extends Activity < @Override protected voidonCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); newHandler().postDelayed(new Runnable() < @Override public void run() < startActivity(newIntent( SplashActivity.this, MainMenuActivity.class)); finish(); >>, 2000); > >