我正在开发一个Android应用程序,我正在做一些繁重的工作(将来自在线网页的数据并将其解析为存储在数据库中)在服务中.目前,它需要大约20多个分钟,而这一次我的UI被卡住了.我正在考虑在服务中使用一个线程,所以我的UI不会卡住,但它会给出错误.我使用以下代码:
Thread thread = new Thread()
{
@Override
public void run() {
try {
while(true) {
sleep(1000);
Toast.makeText(getBaseContext(), "Running Thread...", Toast.LENGTH_LONG).show();
}
} catch (InterruptedException e) {
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
}
}
};
thread.start();
Run Code Online (Sandbox Code Playgroud)
这个简单的代码给出了运行时错误.即使我取出while循环,它仍然无法正常工作.拜托,任何人都可以告诉我我在做什么错.显然,我直接从电子书中复制了这段代码.它可以起作用但不是.
Kon*_*uda 41
Android命令:您不能与自己的线程中的UI对象进行交互
将您的Toast Display包裹进去 runOnUIThread(new Runnable() { });
Zel*_*mir 34
从Android示例中获取新线程的示例(android-8\SampleSyncAdapter\src\com\example\android\samplesync\client\NetworkUtilities.java):
public static Thread performOnBackgroundThread(final Runnable runnable) {
final Thread t = new Thread() {
@Override
public void run() {
try {
runnable.run();
} finally {
}
}
};
t.start();
return t;
}
Run Code Online (Sandbox Code Playgroud)
runnable 是包含网络操作的Runnable.
ozn*_*nus 12
您可以使用HandlerThread并发布到它,这是一个有一个服务的示例.
public class NetworkService extends Service {
private HandlerThread mHandlerThread;
private Handler mHandler;
private final IBinder mBinder = new MyLocalBinder();
@Override
public void onCreate() {
super.onCreate();
mHandlerThread = new HandlerThread("LocalServiceThread");
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper());
}
public void postRunnable(Runnable runnable) {
mHandler.post(runnable);
}
public class MyLocalBinder extends Binder {
public NetworkService getService() {
return NetworkService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73870 次 |
| 最近记录: |