在我的应用我跑中,我保持来电记录和传出呼吁文本文件(保存它的内部存储空间)使用broadcastReciever的服务 。 但是当我按下清除数据按钮(设置=>应用程序=> MYAPP =>明确数据)我的服务也停止。 我用Log.d()
中onDestroy()
方法,但它不是在logcat的登录当我按下clear data
。 我看这个问题有同样的问题,但我没有找到任何解决方案。 然后,我经历了开发人员指南 。 我真的很困惑。
Answer 1:
数据相关的应用程序将不再坚持清算。 为了避免这种情况,你需要签署您的应用程序作为一个系统的应用。
清除数据并终止该应用,并始终。
“强制停止”已经通过意义的各种迭代了。 它用来指只杀死所有的进程和服务,并清除数据也会做同样的强制停止。 还有人建议不如搞清楚时禁用按钮,这可能是为什么你看到它停留在2.2启用了良好的平台较旧的迭代。
然而,在3.2,我相信“强制停止”变化的意思把应用程序的状态下,将无法运行,直到用户做了一些明确启动它(如发射器启动它,选择它作为输入法等)。 当该修改是,“清除数据”继续只杀死进程,并停止其服务,所以使按键保持启用该应用程序是不是在完全停止状态。
编辑:工作的代码示例:
Step 1) Create one Android BroadCastReciever and register it for two action
Manifest
<service android:name="ServiceTest" >
</service>
<receiver android:name="ReceiverCall" >
<intent-filter>
<action android:name="com.android.techtrainner" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
com.android.techtrainner is the custom action. BroadCastReceiver Class contain code to restart service again
public class ReceiverCall extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("Service Stops", "Ohhhhhhh");
context.startService(new Intent(context, ServiceTest.class));;
}
}
Step 2) Create Android service class , do some task there (I have taken one Timer to print Log) and in onDestory()
public void onDestroy() {
try {
mTimer.cancel();
timerTask.cancel();
} catch (Exception e) {
e.printStackTrace();
}
Intent intent = new Intent("com.android.techtrainner");
intent.putExtra("yourvalue", "torestore");
sendBroadcast(intent);
}
文章来源: Service stops on clearing data from settings