微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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处理它.

希望这可以帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐