gpt4 book ai didi

java - Android 异步任务在服务中使用时不起作用?

转载 作者:行者123 更新时间:2023-12-01 05:31:05 24 4
gpt4 key购买 nike

我正在设置一个进行网络调用的后台任务;然而,由于我无法让我设置的 AsyncTask 工作,我的开发已经停滞,我所做的就是在代码中的各个点放置 toast 来查看问题发生的地方。我意识到我会在 AsyncTask 的预执行方法之前的所有时刻得到 toast ;但是,在 doInBackgroundpostexecute 中,我什么也得不到。

这是为什么呢?如果这无法完成,解决方法是什么?

package com.testapp2.second.activities;

import java.util.Date;

import com.testapp2.second.OTweetApplication;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.User;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
import android.widget.Toast;

public class StatsCheckerService extends Service {
private OTweetApplication app;
private Twitter twitter;
User user;

@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public void onCreate() {
super.onCreate();
app = (OTweetApplication) getApplication();
twitter = app.getTwitter();

Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (app.isAuthorized()) {

Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG)
.show();
new toastTwitterInBg();
}
return START_STICKY;

}

@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
}

private class toastTwitterInBg extends AsyncTask<Void, Void, User> {

@Override
protected User doInBackground(Void... arg0) {
try {
user = twitter.verifyCredentials();
Toast.makeText(StatsCheckerService.this, "async tasks do in background", Toast.LENGTH_LONG).show();
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
}

@Override
protected void onPostExecute(User result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Toast.makeText(StatsCheckerService.this, "async tasks on post execute finished", Toast.LENGTH_LONG).show();
}

}
}

最佳答案

正如其他人已经指出的那样,toast 在 doInBackground 中不起作用,因为它在单独的线程上运行。另外,您实际上执行您的AsyncTask吗?

这不应该是:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// ....
new toastTwitterInBg().execute();
// ....
}

注意.execute()

关于java - Android 异步任务在服务中使用时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8961822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com