我需要Handler
多个活动。
我可以像
那样保持静态public static Handler handler = new Handler();
或者如何在多个活动中使用它?如果这个处理程序不能是静态的,我可以拥有多个处理程序吗?
我正在读取Handler必须是静态的,否则我会在另一个线程中得到一个异常,这不是一个好主意。
哪种方式正确?
答案 0 :(得分:1)
I need Handler in more then one Activity
为什么你不为每个活动创建一个处理程序?
或者如何在多个活动中使用它?
只需为每个活动创建它们,它们都应绑定到相同的Looper对象
来自docs:
When you create a new Handler, it is bound to the thread / message queue of the thread that is `creating it`
如果这个处理程序不能是静态的,我可以拥有多个处理程序吗?
确定
我读到Handler必须是静态的,否则我会得到一个 另一个线程中的异常,这不是一个好主意。
我发现的唯一问题是这个 This Handler class should be static or leaks might occur: IncomingHandler 但正如提到的那样,只有当你发布一条很长的延迟信息时才会这样。
答案 1 :(得分:1)
Handler仅对已初始化为Looper线程的线程有效。
UI线程是一个Looper线程,大多数android组件在UI线程上运行,例如活动,服务,内容提供者,自定义应用程序类等,包括你在UI线程上实例化的任何类。
您可以使用:
,而不是创建处理程序http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)
但如果您想使用消息,则必须使用处理程序。
当出现lint错误警告你使处理程序静态时,它意味着使用静态嵌套类,这样你就不会得到对外部类及其所有成员的隐式引用,这些引用在某些情况下会引入问题。您可以声明这样的处理程序以避免该警告:
static MyHandler extends Handler {
// TODO: implement message handling, etc here
}
private mHandler = new MyHandler();
答案 2 :(得分:0)
如果您的Handler
实现是线程安全的,或者您的程序在单线程环境中运行,那么您可以拥有一个处理器实例,它将一个接一个地处理多个事件/活动,因此将其声明为静态。
如果它不是线程安全的,那么如果在多线程环境中对多个活动/事件使用相同的处理程序实例,则会看到意外的结果。
答案 3 :(得分:0)
处理程序始终是静态的。您必须在onCreate of Activity中创建处理程序。据我所知,您必须为单独的活动创建单独的处理程序。