一个android应用多次登录出现多个进程的问题??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个android应用多次登录出现多个进程的问题??相关的知识,希望对你有一定的参考价值。

我的android应用如何让第二次登录时杀死此应用第一次登录的进程??

就是我的应用是在接收广播里写了定时器Timer,,他是1分钟执行一次弹出toast。。
可是我登录3次的话就是一分钟执行3次toast了==
请问这个要如何解决???

一个应用一般只有一到两个进程不会因为重复打开就增多进程;你说的应该是线程或是任务之类的东西吧!~
重复执行屏蔽有两个思路给你,一个是在广播接收时进行判断
onReceive中
if(timerTaskIsRunning)
timerTask.stop();//停止之前的计时器事件,方法自定
timerTask = new TimerTask();生成新的计时器事件

另一种是在定时器里写,思路差不多的,你要看具体情况看哪种方式比较便于管理!追问

不是这个意思,,我的意思是就比如QQ,只允许登录一个QQ要如何做到,第二次再登录时会自动退出第一次登录的那个号??

参考技术A 在activity中的onstop或者ondestory把Timer关了。不然的话,及时你不第二次登陆,退出程序了,每分钟还是会弹出toast的。 参考技术B onDestroy时cancel掉timer啊追问

我的接收广播里的onReceive 方法里用Timer每分钟发个广播【就是广播里发广播】,,另一个service接收去弹出toast==
所以没Activity,本身就是页面退出后一分钟弹出一个toast==

追答

那你登录时再发一个广播啊,收到广播就cancel掉上个timer

追问

我的接收广播里 请问要如何判断 是第一次还是第二次登录的那个应用发出的呢??
此时应该是2个接收广播了,那么第一个接收广播怎么知道是第二个广播发出的?

追答

页面退出是一个广播ACTION_EXIT,用来启动timer。ACTION_LOGIN,取消上次的timer

Android系统是在一个进程中多次向多个接收者发送BOOT_COMPLETED意图还是一次?

【中文标题】Android系统是在一个进程中多次向多个接收者发送BOOT_COMPLETED意图还是一次?【英文标题】:Does Android system send BOOT_COMPLETED intent multiple times to multiple receiver in one process or just once? 【发布时间】:2012-08-23 23:39:49 【问题描述】:

所以基本上我的应用中有两个主要功能,A 和 B,它们都会在启动时执行一些操作。所以我做了两个BroadcastReceiver R1和R2,它们都接收BOOT_COMPLETED意图。 R1的逻辑比较复杂,处理功能A。R2的逻辑很简单,处理B。

我的问题是决定是否应该通过保留两个广播接收器并让它们中的每一个都监听 BOOT_COMPLETED 意图来保持代码更简洁,还是应该将它们结合起来以提高性能?

接收两个相同意图而不是一个对性能的影响有多大? send-receive-intent 过程会在我的应用中发生一次或两次吗?

另外,BOOT_COMPLETED 是否仅在启动完全完成后,用户可以启动应用程序时发送?

编辑:经过测试,两个组件在同一个应用程序中接收相同意图与一个组件接收相同意图之间的差异大约只有几毫秒。

【问题讨论】:

【参考方案1】:

您可以使用 android:priority 属性来控制这些接收器,并使它们按特定顺序执行。优先级最高的活动将首先执行。像这样的:

<activity
     android:name="First activity">
     <intent-filter android:priority="10" >
          <action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" />
     </intent-filter>
</activity>

<activity
     android:name="Second activity">
     <intent-filter android:priority="1" >
          <action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" />
     </intent-filter>
</activity>

你有关于这个in this link的信息

android:priority 应该赋予父级的优先级 组件关于处理由 筛选。该属性对活动和广播都有意义 接收者:它提供有关活动的能力的信息 响应与过滤器匹配的意图,相对于其他 也可以响应意图的活动。当一个意图可以 由具有不同优先级的多个活动处理,Android 将仅将具有更高优先级值的那些视为潜在 意图的目标。它控制广播的顺序 接收器被执行以接收广播消息。那些有 优先级较高的值在具有较低值的值之前被调用。 (这 order 仅适用于同步消息;它被忽略了 异步消息。)仅当您确实需要时才使用此属性 强加接收广播的特定顺序,或者想要 强制 Android 优先选择一项活动。

该值必须是整数,例如“100”。更高的数字有 更高的优先级。默认值为 0。该值必须更大 小于 -1000 且小于 1000。

另见 setPriority()。

【讨论】:

【参考方案2】:

除了山姆的回答...

另外,BOOT_COMPLETED 是否仅在启动完全完成后,用户可以启动应用程序时发送?

它在键盘保护出现时发送。关键是“时间”。启动时接收器有很多,它们都会以不确定的顺序接收广播。请不要假设您将获得广播的确切时间或当时系统的准确状态(例如,可能没有互联网连接)。

【讨论】:

是的,我不会对此做出假设。不过我想问的是,如果性能受到影响,比如说慢一秒,使用两个 BR,用户会再等待一秒看启动屏幕,还是用户实际上能够做其他事情,但只是稍微慢一点。 @JackWang:主屏幕将在启动时接收器接收广播时出现。【参考方案3】:

BroadcastReceiver 本质上独立于任何活动。

如果 Activity A 和 Activity B 是同一个应用程序的一部分,我建议将它们结合起来并仅使用一个 BroadcastReceiver。 如果它们用于不同的应用程序并且您计划单独发布这些应用程序,那么它们应该是两个不同的实体。

【讨论】:

嗨,山姆。感谢您的答复。 A 和 B 在同一个应用程序中。你认为我仍然应该将这两者结合起来,即使这样会使代码看起来不那么干净吗? 根据您的描述,您可以简单地评论 Activity A 的部分并为 B 标记另一个部分,将它们分开但在 BroadcastReceiver 中。 (我会把 B 的代码放在第一位,只是因为你暗示 A 有点乱。):) 当然可以。 receiver1 实际上有 4 个不同的意图来监听 Activity A,其中一些意图有多个可能的额外意图。这就是为什么我担心降低代码的可读性。

以上是关于一个android应用多次登录出现多个进程的问题??的主要内容,如果未能解决你的问题,请参考以下文章

Android内容提供程序中多个进程的多次写入

Android 教你一个进程如何开多个任务(Task)

Google Play Games Android 登录出现错误代码 4

android里怎么实现一应用多进程?

如何限制用户多次登录

尝试运行android应用程序时突然发现多个未找到