looper.prepare 个 ui 线程
looper.prepare an ui thread
我正在尝试使用似乎需要在我的服务中创建处理程序的 SDK。
出现一条错误消息,指出如果线程未调用 Looper.prepare()
,我将无法创建处理程序,所以我调用了 Looper.prepare()
,此问题就消失了。
然而,这个服务需要在一段时间后启动一个 activity,而这个 Looper.prepare()
似乎在搞乱它,因为第一个 UI 函数崩溃说它不能从非-ui线程。
我有点困惑为什么会这样,我对 thread 和 looper 所做的研究对我没有帮助。我明白为什么如果线程上不存在循环程序我们不能创建处理程序,但不知道为什么创建循环程序会阻止我之后使用 ui 线程。
下面我的代码简化了:
public class MyService extends Service implement SDKCallback{
...
void callSDK(){
Looper.prepare();
SDK.run(); //Does thing I don't know about
}
@Override
SDKCallback(){
startActivity(new Intent(this, MyActivity.class);
}
}
您不必致电 Looper.prepare()
。尝试使用此代码创建 Handler
、
new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message message) {
}
};
如果你把Looper.prepare()
放在你的工作线程中,它会解决你的第一个崩溃问题[线程没有调用Looper.prepare()
]。但它不在 UI 线程中,因此您无法开始下一个 Activity
.
上面的代码所做的是,它在 UI 线程中创建了 Handler
。所以你可以开始下一步 Activity
.
编辑:试试这个。
@Override
SDKCallback(){
new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message message) {
startActivity(new Intent(MyService.this, MyActivity.class));
}
};
}
我正在尝试使用似乎需要在我的服务中创建处理程序的 SDK。
出现一条错误消息,指出如果线程未调用 Looper.prepare()
,我将无法创建处理程序,所以我调用了 Looper.prepare()
,此问题就消失了。
然而,这个服务需要在一段时间后启动一个 activity,而这个 Looper.prepare()
似乎在搞乱它,因为第一个 UI 函数崩溃说它不能从非-ui线程。
我有点困惑为什么会这样,我对 thread 和 looper 所做的研究对我没有帮助。我明白为什么如果线程上不存在循环程序我们不能创建处理程序,但不知道为什么创建循环程序会阻止我之后使用 ui 线程。
下面我的代码简化了:
public class MyService extends Service implement SDKCallback{
...
void callSDK(){
Looper.prepare();
SDK.run(); //Does thing I don't know about
}
@Override
SDKCallback(){
startActivity(new Intent(this, MyActivity.class);
}
}
您不必致电 Looper.prepare()
。尝试使用此代码创建 Handler
、
new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message message) {
}
};
如果你把Looper.prepare()
放在你的工作线程中,它会解决你的第一个崩溃问题[线程没有调用Looper.prepare()
]。但它不在 UI 线程中,因此您无法开始下一个 Activity
.
上面的代码所做的是,它在 UI 线程中创建了 Handler
。所以你可以开始下一步 Activity
.
编辑:试试这个。
@Override
SDKCallback(){
new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message message) {
startActivity(new Intent(MyService.this, MyActivity.class));
}
};
}