我有一个定义为的服务:
public class SleepAccelerometerService extends Service implements SensorEventListener
Run Code Online (Sandbox Code Playgroud)
从本质上讲,我正在制作一个应用程序,可以在用户使用他或她的手机/设备睡在床上时,出于各种原因监控加速度计活动.这是一项长期服务,不得在夜间杀死.根据夜间有多少后台应用程序和定期进程,android有时会终止我的进程,从而结束我的服务.例:
10-04 03:27:41.673: INFO/ActivityManager(1269): Process com.androsz.electricsleep (pid 16223) has died.
10-04 03:27:41.681: INFO/WindowManager(1269): WIN DEATH: Window{45509f98 com.androsz.electricsleep/com.androsz.electricsleep.ui.SleepActivity paused=false}
Run Code Online (Sandbox Code Playgroud)
我不想强迫用户将"SleepActivity"或我的应用中的其他活动作为前景.我不能定期运行我的服务,因为它会不断拦截onSensorChanged.
有小费吗?源代码在这里:http://code.google.com/p/electricsleep/
我是Android新手.我正在开发一个记录传感器数据的应用程序.我有两个按钮的活动.当用户按下开始按钮时,我想要启动服务并记录传感器数据,直到用户按下停止按钮.我不确定我想使用哪种类型的服务.我读到了本地与远程服务,但我并没有真正理解其中的区别.
我到现在为止做了什么:
我创建了一个带有两个按钮的活动,用于启动和停止本地服务:
//Start Service
startService(new Intent(this, MyService.class));
//Stop Service
stopService(new Intent(this, MyService.class));
Run Code Online (Sandbox Code Playgroud)
我还创建了一个粘性服务,onStartCommand()开始记录传感器数据:
public int onStartCommand(Intent intent, int flags, int startId) {
mSensorManager.registerListener(this, accelerometer,
SensorManager.SENSOR_DELAY_FASTEST);
mSensorManager.registerListener(this, magnetometer,
SensorManager.SENSOR_DELAY_UI);
mSensorManager.registerListener(this, lightSensor,
SensorManager.SENSOR_DELAY_UI);
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
return Service.START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中:
<service android:name=".MyService" android:enabled="true" android:process=":HelloSensors_background"/>
Run Code Online (Sandbox Code Playgroud)
它运行良好,但问题是当我终止启动服务的应用程序时,此服务重新启动并丢失所有以前记录的数据.我应该使用什么来使服务顺利运行并且即使在应用程序被杀死时仍继续运行以便不丢失任何记录数据?
我正在开发的应用程序中实现Paho MQTT Android服务.在测试了Paho提供的示例应用程序之后,我发现有一些事情我想改变.
https://eclipse.org/paho/clients/android/
应用程序完全关闭后,应用程序服务似乎会关闭.我希望即使在应用程序关闭后,如果有更多消息进入,我也会保持服务运行.我也在寻找一种方法,一旦收到新消息,就可以将应用程序打开到特定的活动.
这是在消息到达时调用的回调之一,我尝试实现一个简单的startActivity来打开一个特定的活动但是如果应用程序关闭/不再运行它就不起作用.
如果有人使用过PAHO MQTT Android服务,是否有一种特定的方法可以在应用程序关闭时阻止服务停止,如何在消息到达时重新打开应用程序?
/**
* @see org.eclipse.paho.client.mqttv3.MqttCallback#messageArrived(java.lang.String,
* org.eclipse.paho.client.mqttv3.MqttMessage)
*/
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
// Get connection object associated with this object
Connection c = Connections.getInstance(context).getConnection(clientHandle);
// create arguments to format message arrived notifcation string
String[] args = new String[2];
args[0] = new String(message.getPayload());
args[1] = topic + ";qos:" + message.getQos() + ";retained:" + message.isRetained();
// get the string from strings.xml and format
String messageString = …Run Code Online (Sandbox Code Playgroud) 关于它有几个问题,但我总是读同样的事情:"如果系统需要资源,服务将被杀死"或"你无法构建一个永远运行的服务,因为它在后台运行的越多,就越容易受到影响系统杀死它"等等
我面临的问题是:我的服务运行良好并且正如预期的那样,如果我运行我的应用程序然后退出它我的服务仍在运行,但是当我杀了我的应用程序时(通过转到"最近的应用程序"并转换它离开)服务停止.在这一刻,如果我转到设置>> aplications >>运行,我会看到该服务正在重启.过了一会儿,它回来了,我的服务运行没有问题.
我谷歌它,我找到了一些我能做的事情,但让我们先看看我的代码:
我通过这种方式启动我的服务(点击一下按钮后):
Intent intent = new Intent (MainActivity.this, MyService.class);
startService(intent);
Run Code Online (Sandbox Code Playgroud)
我还有3个额外的整数,所以我有这样的东西:
final Integer i, i2, i3;
i = 5; //for example
i2 = 10; //for example
i3 = 15; //for example
final Intent intent = new Intent (MainActivity.this, MyService.class);
intent.putExtra("INTEGER1", i);
intent.putExtra("INTEGER2", i2);
intent.putExtra("INTEGER3", i3);
startService(intent);
Run Code Online (Sandbox Code Playgroud)
在MyService中,我有以下方面:
public class MyService extends Service
{
AlarmManager am;
BroadcastReceiver br;
PendingIntent pi;
Integer i, i2, i3;
@Override
public void onCreate()
{
super.onCreate();
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
pi = PendingIntent.getBroadcast(this, …Run Code Online (Sandbox Code Playgroud)