我正在尝试生成一个始终保持活动的服务,即使用户关闭了应用程序.根据这些线程
这可以通过IntentServices或Service.START_STICKY来完成
然而,我尝试了两种类型的服务而没有成功.换句话说,当用户关闭应用程序时,我的服务就会被杀死.有人可以指出这是否可以做到以及如何做?这是我没有成功的尝试:
使用IntentService:
public class MyIntentService extends IntentService {
private final int mPollingTimeMS = 500;
private int mInitializationPollingCount = 0;
private Thread mPollThread;
public MyIntentService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
mPollThread = new Thread() {
public void run() {
while (true) {
try {
Log.e(Constants.Engine.LOGGER_TAG_DEV,
"SDK Service Running: " +
mInitializationPollingCount * mPollingTimeMS +
"ms have elapsed");
mInitializationPollingCount++;
sleep(mPollingTimeMS);
} catch (Exception e) {
StackTraceElement trace = new Exception().getStackTrace()[0];
Logger.e(Constants.Engine.LOGGER_TAG_APP, "[Exception:" + …Run Code Online (Sandbox Code Playgroud) 我想知道android应用程序中的进程和服务之间的区别是什么?我尝试了很多有关此主题的研究,但还没有弄清楚我的基础知识...请帮忙吗?
我几乎准备好将应用程序上传到 Google Play,但我想做得好,没有错误(或试图避免错误),所以我遵循了这个问题:在将 android 应用程序发布到市场之前的“待办事项”列表[关闭]
但是,在那里我看到了一个让我更加关注的答案,因为我不知道这些属性。这是我参考的答案。
答案建议声明android:process和android:sharedUserId属性,因此我查找了该文档。
寻找有关这两个属性的一些信息,我发现这个答案的android:process属性,这让我看到更清晰这个属性如何都可以使用。我可以从那里得到的是,您可以声明您的活动将在不同的进程中启动,以避免在运行主进程时出现内存限制。如果我错了,请纠正我。
远没有遇到android:sharedUserId属性的详细文档,我尝试在这里查看一些问题:
我可以从那里得到的是我可以在应用程序之间共享一些信息。如果我错了,再次纠正我。
在我的应用程序中,我只在其中使用 Google 地图,所以我想到了一些问题:
我应该总是声明android:process并android:sharedUserId作为我之前链接的答案所建议的吗?
如果是真的,是否会产生一些安全问题?我不知道这是否可行,但我认为如果某些应用程序可以访问您的数据应用程序,那么这可能是一个安全问题(取决于您的应用程序中拥有的数据类型)。
我应该用什么名字android:sharedUserId?它可以是我想要的任何名称还是必须是特定名称(例如,包名称)以便其他应用程序可以访问我的应用程序数据?那是android:sharedUserId公开的吗?
如果我现在不希望我的应用程序共享信息,但将来我想这样做。我应该在我android:sharedUserId第一次在市场上发布时声明吗?那么其余的应用程序可以访问我的数据吗?
android:process例如,我应该声明执行我的地图Fragment吗?注意:我对这些属性完全感到困惑,所以也许问题的格式并不完全正确(在句法或概念上)。请纠正我在这个问题上可能犯的任何错误。我试图复制尽可能多的信息,但这还不足以解决我的疑虑。
提前致谢!
关于Android中的流程的三个问题.我正在开发一个应用程序.如果我在AndroidManifest.xml中声明要在另一个进程中运行的服务
<service android:name=".MyService" android:process=":MyProcess"/>
Run Code Online (Sandbox Code Playgroud)
这是否意味着将有两个JVM实例,一个由MyService使用,另一个由其他代码使用?
如果上面问题的答案是YES,那么它是否也意味着如果我有一个Activity和MyService使用的单例类,那么将为单例创建两个实例?
如何确保两个进程只创建和共享一个实例呢?更好地提供样本:)
==== ==== UPDATE
感谢您的所有评论和答案,遗憾的是,我的项目需要使用单独的服务流程,因为它具有长时间运行的后台任务.根据你的回复,我有第四个问题:
如果我需要跨进程和其他代码的进程传递一个非parcelable对象MyService.可能吗?如何?
我正在使用启动Android服务,
startService(getApplicationContext(), MyService.class);
Run Code Online (Sandbox Code Playgroud)
我已经在AndroidManifest中正确定义了我的服务。现在,我从Application create调用上面的代码。
情况1:从应用程序onCreate()调用以上代码
情况2:从应用程序中的Activity调用以上代码
这是预期的行为吗?
我的Android清单代码要求:
<service
android:exported="false"
android:enabled="true"
android:name=".MyService"
android:process=".MyService">
</service>
Run Code Online (Sandbox Code Playgroud)