Android应用在启动服务

时间:2016-07-03 15:29:44

标签: android multithreading service android-asynctask

我想创建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>

所以我的应用程序启动的结果,也是服务,但是应用程序崩溃仍然没有响应,并且在android studio consol上我仍然显示运行的服务(带有日志消息)

当我使用IntentService时,它对我有用,但是对于Service它不是吗?是多线程的问题还是什么?

1 个答案:

答案 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> 可能会在您的服务生命周期内多次调用。)

或者,您可以对其进行设置,以便您的服务以异步方式执行所有操作并且不会阻止。这是否更容易取决于服务最终的作用。