我的android Vitals中有一些ANR:
意图广播{act=Android.Intent.Action.Screen_On flg=0x50200010(有附加内容)}或
广播意图{act=Android.Intent.Action.Screen_On flg=0x50000010}。
我也有一些ANR:
意图广播{act=Android.Intent.Action.Screen_off flg=0x50000010}
"main" tid=1 Waiting
"main" prio=5 tid=1 Waiting
| group="main" sCount=1 dsCount=0 flags=1 obj=0x73c98680 self=0xee259000
| sysTid=24710 nice=0 cgrp=default sched=0/0 handle=0xf26ff4bc
| state=S schedstat=( 2919404633 900616698 9273 ) utm=197 stm=94 core=0 HZ=100
| stack=0xff6b6000-0xff6b8000 stackSize=8MB
| held mutexes=
at java.lang.Object.wait (Native method)
- waiting on <0x03bec179> (a com.myPackageName)
at com.myPackageName.framework.impl.GLGame.onPause (GLGame.java:714)
- locked <0x03bec179> (a com.myPackageName)
at com.myPackageName.onPause (MyApp.java:39)
at android.app.Activity.performPause (Activity.java:7399)
at android.app.Instrumentation.callActivityOnPause (Instrumentation.java:1414)
at android.app.ActivityThread.performPauseActivityIfNeeded (ActivityThread.java:4115)
at android.app.ActivityThread.performPauseActivity (ActivityThread.java:4092)
at android.app.ActivityThread.performPauseActivity (ActivityThread.java:4066)
at android.app.ActivityThread.handlePauseActivity (ActivityThread.java:4040)
at android.app.ActivityThread.-wrap16 (ActivityThread.java)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1708)
at android.os.Handler.dispatchMessage (Handler.java:105)
at android.os.Looper.loop (Looper.java:164)
at android.app.ActivityThread.main (ActivityThread.java:6944)
at java.lang.reflect.Method.invoke (Native method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
我很确定这个ANR是由同步块引起的,除非第714行指向super.onpause()
。在glgame.onpause(glgame.java:714)
中,您可以有意等待主线程中的对象,或者使用同步的final变量(可以是同步的列表、集、映射等)由于您还没有共享任何源代码,我不可能不看就知道是什么导致了它。
在主线程中,使用这种方法可能会阻塞您的线程,这是您绝对不想要的(假设锁也在另一个线程中使用)
// One example
@Override
public void onPause() {
synchronized(mLock) {
// access the variable
}
}
// Another example
@Override
public void onPause() {
synchronizedList.add(new Object())
}
如果此时有另一个线程正在访问锁或同步列表、映射等,那么这两种方法都将被阻止。也不放弃锁。对于解决方案,我可以推荐使用lock
接口使用ReentrantLock,使用类似lock mLock=new ReentrantLock()
,并将您的调用变成如下所示:
@Override
public void onPause() {
if (mLock.tryLock()){
try{
// do your work here
} finally {
mLock.unlock();
}
}
}
// Another example
@Override
public void onPause() {
if (mLock.tryLock()){
try{
// The list or set should not be synchronized.
// The synchronization must be managed with lock's
// "tryLock" method. The "tryLock" also has an
// overload with a timeout which you can use
// in your background thread, but you must not
// use on the main thread.
normalList.add(new Object());
} finally {
mLock.unlock();
}
}
}
在主线程上访问的变量不应该阻塞,或者工作线程应该尽可能少地阻塞它们,这样主线程可以在确保同步之后立即获得锁。所以我建议检查您的整个代码中关于主线程和其他线程之间的共享变量和引用的信息,并且只同步变量上的更改,而不是一个需要很长时间执行的整个代码块。
我有麻烦当我启动应用程序和注册设备在Gcm 知道怎么修好它吗? 其余的工作良好,我收到的通知和正确的。 错误
当我收到一条消息,我正在用谷歌服务从我的桌面发送到我的Android系统时,我正在用谷歌服务进行广播,在广播后,我的应用程序崩溃了,我的日志被切断了 我的GCM服务类公共类GCMIntentService扩展了GCMBaseIntentService{ 我的显示消息函数公共静态无效displayMessage(上下文,字符串消息){Intent意图=new Intent(DISPLAY_MESSA
setAction()在intent(服务)中做什么 我并不真正理解setAction()的功能,我主要是在“服务到活动的数据传递”示例中找到它的。这根绳子可以自由设置吗?。它到底做什么? 创建广播意图时,除了可选数据和类别字符串之外,它还必须包括一个ACTION STRING。与标准意图一样,数据是使用键值对与意图对象的putExtra()方法一起添加到广播意图中的。可选的类别字符串可以通过调用
DALVIK线程:(互斥:TLL=0 TSL=0 TSCL=0 GHL=0) 后台进程prio=5 tid=15 WAIT group=“main”scount=1 dscount=0 obj=0x4216e7e0 self=0x400b6a18 systid=24414 nice=0 sched=0/0 cgrp=apps handle=1074723664 state=s schedstat=
问题内容: 尝试使用意图时收到java.lang.SecurityException 。有趣的是,此崩溃仅在装有Android 5.1-5.1.1的华为上发生我没有华为设备。您能给我一些建议吗? 堆栈跟踪 问题答案: 无论出于何种原因,华为都将其保留在原处,但他们将其标记为未导出。您无法启动该活动。您所能做的就是捕获异常,并向用户说明您无法在此处导航。
通知广播接收机: 谁能帮帮我吗?我不知道我做错了什么