Android:服务因关闭活动而停止

时间:2015-03-27 15:06:08

标签: android

我从本教程创建了一个叠加视图:http://www.piwai.info/chatheads-basics/

这是我的服务类:

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););
    }
...
}

现在我的问题是每当我关闭活动,我的服务停止并消失或onCreate CustomService方法被调用时,它就会重新创建它。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您必须覆盖onStartCommand并退回服务中的START_STICKY

类似的东西:

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

     return START_STICKY;
}

还要确保在清单中声明您的服务:

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

同时将您的工作代码从onCreate移至onStartCommand,看看它是否进行了任何更改。

另外请确保您没有在服务中做很多工作,因为如果手机/模拟器的mem / cpu不足,操作系统会破坏使用过多资源的服务

要做的另一件事是在Application级别启动服务,即扩展Application级别并将全局内容放在那里

答案 1 :(得分:1)

我找到了答案。

我应该在前台运行服务:making a service a foreground service