我有一个与 Android 小部件(主屏幕上的小部件)相关的问题,我正在尝试创建一个小部件,该小部件将定期更新其内容。
我使用一个被调用的服务来做到这一点。当我尝试在此服务中进行基本网络调用 (GET) 时,我遇到了 NetworkOnMainThread 异常。
我知道这个异常是什么,但我认为 Android 中的服务位于单独的线程中。所以我只是误会了...
所以,为了做到这一点,我做了一个 AsyncTask 但我对我的代码不满意,我只是认为我所做的不是一个好的用法。打电话给任何人告诉我我的想法是否正确?
这是我的服务内容:
public class ServiceUpdate extends Service
{
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
new AsyncTask<Void, Void, Void>()
{
String res = null;
@Override
protected Void doInBackground(Void... params)
{
// Getting something from the WWW
res = Network.getStringFromWS("http://wordpress.org/plugins/about/readme.txt");
return null;
}
@Override
protected void onPostExecute(Void result)
{
// Substring for test
res = res.substring(0, 100);
RemoteViews remoteViews = new RemoteViews(getApplicationContext().getPackageName(),
R.layout.widget_layout);
remoteViews.setTextViewText(R.id.tvTime, res);
ComponentName thiswidget = new ComponentName(getApplicationContext(), TimeWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
manager.updateAppWidget(thiswidget, remoteViews);
super.onPostExecute(result);
}
}.execute();
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
}
谢谢大家的观点!