Android:创建在应用程序停止时运行的服务

如何创建一个在应用程序停止时继续运行的服务?我在清单文件中的单独进程中创建服务:

<service
    android:name="com.example.myservice"
    android:process=":remoteservice" />

我也在服务的onStartCommand中返回START_STICKY:

@Override
public in onStartCommand(Intent intent,int flags,int startId){
    return Service.START_STICKY;
}

解决方法

我不会使用android:process属性 – 这实际上是在一个单独的进程中运行您的服务,并且很难执行共享首选项之类的操作.当您的应用程序终止时,您不必担心您的服务将会死亡,服务将继续运行(这是服务的重点).您也不需要绑定服务,因为绑定服务会启动和死亡.话虽如此:

<service
    android:enabled="true"
    android:exported="true"
    android:name=".MyService"
    android:label="@string/my_service_label"
    android:description="@string/my_service_description"
    <intent-filter>
        <action android:name="com.package.name.START_SERVICE" />
    </intent-filter>
</service>

您可以为启动服务的意图定义自己的操作(无法由系统启动 – 必须是活动).我喜欢将“enabled”设置为true,以便系统可以实例化我的服务,并“导出”,以便其他应用程序可以发送意图并与我的服务进行交互.你可以找到更多关于这个here的信息.

您还可以创建一个使用绑定的长时间运行服务,如果您这样做只是为绑定器添加和意图,例如:

<action android:name="com.package.name.IRemoteConnection" />

现在从您的活动开始服务:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent serviceIntent = new Intent("com.package.name.START_SERVICE");
        this.startService(serviceIntent);

        // You can finish your activity here or keep going...
    }
}

现在为服务:

public class MyService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        // This is triggered by the binder action intent.
        // You can return your binder here if you want...
        return null;
    }


    @Override
    public void onCreate() {
        // Called when your service is first created.
    }

    @Override
    public in onStartCommand(Intent intent,int startId) {
        // This is triggered by the service action start intent
        return super.onStartCommand(intent,flags,startId);
    }
}

现在你的服务应该运行.为了帮助延长寿命,有一些技巧.使其作为前台服务运行(您在服务中执行此操作) – 这将使您创建一个粘贴在状态栏中的通知图标.同时保持你的HEAP光,使你的应用程序不太可能被Android杀死.

当你杀死DVM时服务也会被杀死 – 因此,如果你要去设置 – >应用程序并停止应用程序,你就会杀死DVM,从而导致服务中断.仅仅因为您看到您的应用程序在设置中运行并不意味着Activity正在运行.活动和服务具有不同的生命周期,但可以共享DVM.请记住,如果不需要,你不必杀死你的活动,只需让Android处理它.

希望这可以帮助.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...