我知道这是一个基本问题,我是android服务的新手。我已经对Google和StackOverflow进行了研究。 stackoverflow中有很多与我的主题相关或类似的问题,但是我无法得到正确的答案而且我被转移到不同的主题。
这是我正在运行的简单测试代码。
public class Service extends android.app.Service {
private Handler mHandler;
private void ping() {
try {
Log.e("Tag", "Success");
Toast.makeText(getApplicationContext(), "Service Ping", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.e("Error", "In onStartCommand");
e.printStackTrace();
}
scheduleNext();
}
private void scheduleNext() {
mHandler.postDelayed(new Runnable() {
public void run() { ping(); }
}, 3000);
}
public int onStartCommand(Intent intent, int x, int y) {
mHandler = new android.os.Handler();
ping();
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
在此弹出的Toast消息和每3秒打印一次Log消息,即使应用程序最小化也可以。但是当我完全退出应用程序时,没有打印Toast或Log。在这个SO ANSWER中清楚地说明为什么没有UI就无法调用Toast消息。而且我无法打印LOG,因为这个过程正在被杀死。
基本上,我希望服务每5分钟在后台运行,并且需要从在线获取数据。我该如何实施该服务?并且赞赏任何示例代码或教程?
答案 0 :(得分:0)
启动服务时,默认情况下,它与启动它的任何组件在同一进程中运行。当组件运行的进程退出时,服务也是如此。要在自己的进程中启动服务,您需要在清单中执行以下操作:
<service
android:name=".Service"
android:enabled="true"
android:exported="false"
android:process=":separate_service_process"
android:stopWithTask="false" >
</service>
在android:process
属性的标签前放置冒号告诉系统在单独的进程中启动服务,android:stopWithTask
属性将告诉系统即使在启动它的组件停止。有关清单设置的详细信息,请参阅http://developer.android.com/guide/topics/manifest/service-element.html(stopWithTask
属性是ServiceInfo
类的一部分。)
现在使用startService(Intent)
启动您的服务,您应该全部设置好。祝你好运!
PS - 我建议您将Service类重命名为独特的,以避免与基本Service类混淆。