关闭应用程序时,Android服务会继续断开

时间:2017-02-28 17:53:55

标签: java android

我之前设法让我的服务继续运行。但是今天我回到应用程序继续使用应用程序后,我注意到应用程序关闭后服务断开连接,这是以前没有发生的。

我在我的主要活动中启动服务,如下所示:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.activity_main);
        if(savedInstanceState == null) {
            setContentView(R.layout.activity_main);
            Intent i  = new Intent(MainActivity.this, SystemWebService.class);
            SystemWebService.setMain(this);
            MainActivity.this.startService(i);

        }

SystemWebService类中的代码如下所示:

 public class SystemWebService extends Service {

        private static WebView webdemo;
        private static MainActivity ma;
        //Context dex;

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

        @Override
        public  int onStartCommand(Intent intent, int flags, int startId){
            // let the service continue until stopped
            Toast.makeText(this, "Service has started", Toast.LENGTH_SHORT).show();
            return START_STICKY;
        }

        @Override
        public void onDestroy(){
            super.onDestroy();
            Toast.makeText(this, "Service has been destroyed", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCreate() {
            super.onCreate();

        }

        public static void setMain(MainActivity a) {
            ma = a;
            SystemWebService sws = new SystemWebService();
            sws.setView();
        }
}

这是设置webview的代码

public  void setView() {
        webdemo = (WebView) ma.findViewById(R.id.webdemo);
        webdemo.addJavascriptInterface(new SystemWebService.WebAppInterface(this), "Android");
        webdemo.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest url){
                return false;
            }
        });
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            webdemo.getSettings().setJavaScriptEnabled(true);
            webdemo.getSettings().setDomStorageEnabled(true);
            webdemo.getSettings().setAllowFileAccessFromFileURLs(true);
            webdemo.getSettings().setAllowUniversalAccessFromFileURLs(true);
        }

        webdemo.loadUrl("file:///android_asset/_wv.html");
    }

webview建立与我们服务器的连接,我通常会在日志中看到数据显示。在应用程序关闭之前,我仍然会继续看到数据传递的流量,但从右边看,我没有看到任何内容,只有消息“应用程序已终止”。

我似乎无法理解发生了什么。

1 个答案:

答案 0 :(得分:0)

将您的活动的引用传递给服务,并保留其静态实例不是推荐的开发方式。它可能会在您的活动或服务的生命周期中导致意外行为。

使用绑定服务。请查看此处的文档:https://developer.android.com/guide/components/bound-services.html