Kev*_*vik 12 multithreading android
我有一个主要班级;
ClientPlayer extends Activity {
Run Code Online (Sandbox Code Playgroud)
和服务
LotteryServer extends Service implements Runnable {
Run Code Online (Sandbox Code Playgroud)
当尝试在此服务的run方法中使用RunOnUiThread时,我收到编译器错误,"无法对非静态方法进行静态引用"
如何解决这个问题?这里显示了我如何使用代码;
@Override
public void run() {
// I tried both ClientPlayer.runOnUiThread and LotteryServer.runOnUiThread
// both don't work
ClientPlayer.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "from inside thread", Toast.LENGTH_SHORT).show();
}
});
} // end run method
Run Code Online (Sandbox Code Playgroud)
Viv*_*wal 19
runOnUiThread不是静态方法.
如果你想在UIThread上运行你的runnable你可以使用它
Handler handler = new Handler(Looper.getMainLooper());
这将为UI Thread创建一个处理程序.
ClientPlayer extends Activity {
.
.
public static Handler UIHandler;
static
{
UIHandler = new Handler(Looper.getMainLooper());
}
public static void runOnUI(Runnable runnable) {
UIHandler.post(runnable);
}
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
现在你可以在任何地方使用它.
@Override
public void run() {
// I tried both ClientPlayer.runOnUiThread and LotteryServer.runOnUiThread
// both don't work
ClientPlayer.runOnUI(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "from inside thread", Toast.LENGTH_SHORT).show();
}
});
} // end run method
Run Code Online (Sandbox Code Playgroud)
Sye*_*rah 13
对于上述问题有一个非常简单的解决方案,只需在您的onCreat()方法之前创建Activity的静态引用
MainActivity mn;
Run Code Online (Sandbox Code Playgroud)
然后在你这样的onCreat()方法中初始化它
mn=MainActivity.this;
Run Code Online (Sandbox Code Playgroud)
之后你只需用它来打电话给你 runOnUiThread
mn.runOnUiThread(new Runnable() {
public void run() {
tv.setText(fns);///do what
}
});
Run Code Online (Sandbox Code Playgroud)
希望它有用.
您可以获取Activity的实例,将其传递给服务,然后使用它而不是类名.
然后你可以使用:
yourActivity.runOnUiThread( ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11557 次 |
| 最近记录: |