我从本教程创建了一个叠加视图: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
方法被调用时,它就会重新创建它。
有什么想法吗?
答案 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