我想创建android服务,它将使用json检查我的网站中是否有新项目:) 所以我的第一步是测试服务是否会很好:) 我创建了我的服务
public class NotifyService extends Service {
public static boolean ServiceIsRun=false;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int i = 1;
while (ServiceIsRun){
i++;
Log.i("broadService","hello from Service"+i);
try{
Thread.sleep(20000);
}catch (Exception e){
}
}
return START_STICKY;
}
}
和我的接收者:
public class NotifyBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
if (intent.getAction().equalsIgnoreCase("com.latestBabiaNews")){
Log.i("broadReceiver","hello from Broadcast");
}
}
}
ps:我在我的fragmenet中有asynctask,从服务器加载数据, 我就这样调用了这个服务(在onPostExecute()
中 if(NotifyService.ServiceIsRun==false){
NotifyService.ServiceIsRun=true;
Intent intent = new Intent(getContext(),NotifyService.class);
getActivity().startService(intent);
}
.. 我的xml清单:
<service
android:name=".NotifyService">
</service>
<receiver android:name=".NotifyBroadcast">
<intent-filter>
<action android:name="com.latestBabiaNews">
</action>
</intent-filter>
当我使用IntentService时,它对我有用,但是对于Service它不是吗?是多线程的问题还是什么?
答案 0 :(得分:0)
服务与应用程序的其余部分在同一个线程中运行。如果您阻止该服务,则会阻止整个应用程序。
如果要执行阻止操作,请在服务器中启动新线程。请确保您正确执行此操作(例如,<component type="Config">
<config>
<configFile>web.config</configFile>
<install>
<configuration>
<nodes>
<node path="/configuration/dotnetnuke/sitemap/providers" action="update" key="name" collision="overwrite">
<add name="DNNSimpleArticleSiteMapProvider" type="Christoc.Modules.dnnsimplearticle.Providers.Sitemap.Sitemap, DNNSimpleArticle" providerPath="~\DesktopModules\dnnsimplearticle\Providers\Sitemap\" />
</node>
</nodes>
</configuration>
</install>
<uninstall>
<configuration>
<nodes />
</configuration>
</uninstall>
</config>
</component>
可能会在您的服务生命周期内多次调用。)
或者,您可以对其进行设置,以便您的服务以异步方式执行所有操作并且不会阻止。这是否更容易取决于服务最终的作用。