Android:通过关闭活动停止服务

Android:通过关闭活动停止服务,android,Android,我根据本教程创建了一个覆盖视图: 这是我的服务课: public class CustomService extends Service{ private WindowManager mWindowsManger; private ImageView mFloatingImage; private WindowManager.LayoutParams mParams; @Override public IBinder onBind(Intent i

我根据本教程创建了一个覆盖视图:

这是我的服务课:

public class CustomService extends Service{

    private WindowManager mWindowsManger;
    private ImageView mFloatingImage;
    private WindowManager.LayoutParams mParams;



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

    @Override
    public void onCreate() {
        super.onCreate();
        mWindowsManger = (WindowManager) getSystemService(WINDOW_SERVICE);

        mFloatingImage= new ImageView(this);
        mFloatingImage.setImageResource(R.mipmap.ic_launcher);
        mFloatingImage.setAlpha(0.5f);
        mParams = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);

        mParams.gravity = Gravity.TOP | Gravity.LEFT;
        mParams.x = 0;
        mParams.y = 100;
        mWindowsManger.addView(mFloatingImage, mParams);

        mFloatingImage.setOnTouchListener(new CustomTouchListener(this));

    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mFloatingImage!= null) mWindowsManger.removeView(mFloatingImage);
    }
}
这是我的活动,
CustomService
从这里开始

public class MainActivity extends ActionBarActivity {


    @Override
    protected void onStart() {
        super.onStart();
        startService(new Intent(this, CustomService.class););
    }
...
}
现在我的问题是,每当我关闭活动时,我的服务就会停止并消失,或者调用
CustomService
onCreate
方法并重新创建它


有什么想法吗?

您必须覆盖
onStartCommand
并在您的服务中返回
START\u STICKY

比如:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // some code

     return START_STICKY;
}
还要确保在清单中声明您的服务:

<service android:name = ".YourServiceClass"></service> 

另外,将工作代码从onCreate移动到onStart命令,并查看是否有任何更改

还要确保您在服务中没有做非常繁重的工作,因为如果手机/仿真器内存/cpu不足,操作系统将破坏使用过多资源的服务

另一件事是在
应用程序
级别启动服务,即扩展
应用程序
类,并将全局内容放在其中

我找到了答案


我应该在前台运行服务:

同样的问题出现了。我的
服务
stopped@Saeed我已经添加了一些提示,也许它们有帮助,谢谢,但问题出现了again@Saeed告诉我你是怎么注意到服务站的?将一些日志记录放在服务的活动和onDestroy之上,以了解服务何时停止。尝试使用不同的设备/仿真器,看看它是否是相同的
onStop
onDestroy
。正如您从我的代码中看到的,mFloatingImage应该显示在
窗口上,所以有时它会重新创建服务(转到
onStartCommand
onCreate
),有时Windows上没有
图像视图(我做了一些日志记录,但在这种情况下,logcat中没有任何内容)我想我的服务停止了(我在不同的设备上测试过,同样的问题发生了)。最后我找到了一个更好的方法:但我不知道为什么会发生这个问题