标签: handler

来自Google Analytics for Android的RuntimeException"向死线程上的处理程序发送消息"

我正在使用Google Analytics for Android来跟踪Android应用上的活动和网页浏览量.调用跟踪器的调度方法时,我收到一个RuntimeException:

07-12 18:02:05.594: WARN/MessageQueue(12823): Handler{44a08620} sending message to a Handler on a dead thread
07-12 18:02:05.594: WARN/MessageQueue(12823): java.lang.RuntimeException: Handler{44a08620} sending message to a Handler on a dead thread
07-12 18:02:05.594: WARN/MessageQueue(12823):     at android.os.MessageQueue.enqueueMessage(MessageQueue.java:179)
07-12 18:02:05.594: WARN/MessageQueue(12823):     at android.os.Handler.sendMessageAtTime(Handler.java:457)
07-12 18:02:05.594: WARN/MessageQueue(12823):     at android.os.Handler.sendMessageDelayed(Handler.java:430)
07-12 18:02:05.594: WARN/MessageQueue(12823):     at android.os.Handler.post(Handler.java:248)
07-12 18:02:05.594: WARN/MessageQueue(12823):     at com.google.android.apps.analytics.NetworkDispatcher$DispatcherThread.dispatchEvents(Unknown Source)
07-12 18:02:05.594: WARN/MessageQueue(12823):     at com.google.android.apps.analytics.NetworkDispatcher.dispatchEvents(Unknown Source)
07-12 18:02:05.594: WARN/MessageQueue(12823):     at com.google.android.apps.analytics.GoogleAnalyticsTracker.dispatch(Unknown Source)
07-12 18:02:05.594: WARN/MessageQueue(12823):     at com.company.activity.set(MyActivity.java:177)
07-12 18:02:05.594: WARN/MessageQueue(12823):     at com.company.activity.access$34(MyActivity.java:175)
07-12 …
Run Code Online (Sandbox Code Playgroud)

android analytics google-analytics handler dispatch

6
推荐指数
1
解决办法
1732
查看次数

每20-30秒更新一次Android小部件的最佳方式:处理程序,服务或警报?

我有一个4x4小部件,我想每15-20秒更新一小部分.显然,我不希望在手机处于待机状态时更新它.小部件还需要响应除我的计时器之外的一些系统事件.那么,哪个是最佳选择?

  • 一个AlarmManager:很好,但如果需要每20秒运行一次,可能是cpu密集型的
  • 一个处理程序:轻,但我不知道如何在手机睡觉时停止它
  • 服务:在这里我还需要了解如何在手机睡眠时停止它

我还需要更新我的小部件的一小部分而不更新它的所有屏幕区域,这可能吗?

谢谢大家.

java service android widget handler

5
推荐指数
1
解决办法
2168
查看次数

android.os.Handler类是否消除了将某些方法声明为synchronized的需要?

在组合一个简单的"时钟"应用程序时,我发现Android要求你使用生活在线程A中的android.os.Handler来更新线程A中的View对象,其中包含来自线程B的数据结果.

我还是比较新的Java,这是我以前第一次明确处理Threads,但我知道如果两个不同的线程想要访问相同的数据,通常会将方法和/或操作声明为synchronized .但是看起来android.os.Handler是一种特定于Android的线程之间同步数据的方式,这样你就可以避免我刚刚链接到的Oracle文档中详述的经典 并发错误.这是真的吗?

如果我发现自己的情况是Android操作系统要求我使用android.os.Handler将数据从一个线程传送到另一个线程,这是否意味着我不必声明用于派生该方法的方法数据同步?

java multithreading android synchronized handler

5
推荐指数
1
解决办法
3672
查看次数

如何从另一个线程做吐司(没有runOnUiThread)

我需要从处理线程制作一个Android toast,这是OpenCV的自定义,所以我不能像这里建议的那样使用runOnUiThread(): Android:在一个线程中Toast.

大部分代码来自CVCamera示例应用程序.但是那些不熟悉的,当我选择Surf菜单按钮时,SURFProcessor就像这样调用:

           else if (item.getTitle().equals("SURF")) {

                   defaultcallbackstack.addFirst(new SURFProcessor());
                   toasts(DIALOG_TUTORIAL_SURF, "");

           }
Run Code Online (Sandbox Code Playgroud)

运行此处理器线程,以便当我按下手机的相机按钮(capturePress = true)时,将拍摄图像并完成处理.我想调用toasts方法如图所示:

class SURFProcessor implements NativeProcessor.PoolCallback {

           @Override
           public void process(int idx, image_pool pool, long timestamp,
                           NativeProcessor nativeProcessor) {
                   if(capturePress) {
                           String processMsg = processor.processFeatures(idx, pool, cvcamera.DETECT_SURF);
                           capturePress = false;
                           toasts(PROCESS_MESSAGE, processMsg);
                   }
           }
}
Run Code Online (Sandbox Code Playgroud)

这是toasts方法,位于主类扩展Activity:

void toasts(int id, String msg) {
           switch (id) {
           case PROCESS_MESSAGE:
                   Toast.makeText(MMRapp.this, msg, Toast.LENGTH_LONG).show();
                   break;
.........
Run Code Online (Sandbox Code Playgroud)

现在这段代码给了我一个错误:"无法在没有调用Looper.prepare()的线程内创建处理程序." 如何调用toasts方法?或者是否可以让toasts方法监听processMsg中的更改?如果可能的话,我可以通过发送processMsg或改变类变量来实现.本质上,我需要从此处理器线程更新的String.

非常感谢,如果需要,我会提供更多信息/代码.
-Tom

android opencv handler toast

5
推荐指数
1
解决办法
6581
查看次数

通用处理程序中的会话

我有以下简单的处理程序(为vissibilty sakes删除了一些代码,但是下面的代码仍然失败)

<%@ WebHandler Language="C#" Class="DownloadHandler" %>
using System;
using System.Web;

public class DownloadHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        if (context.Session["t1"] != "true")
        {

        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该行if (context.Session["t1"] != "true")失败,"对象引用未设置为对象的实例".我不明白为什么会这样?

c# asp.net session handler

5
推荐指数
1
解决办法
4746
查看次数

Java applet:如何在页面刷新之前确保销毁完成

在Java util日志记录中,我在init()上启动处理程序,并在destroy()处关闭处理程序,它完全正常:创建了一个日志文件等.如果用户正常刷新页面,它仍然只创建一个日志文件.

但是,如果用户快速刷新applet的页面几次,看起来似乎没有调用destroy()或者没有完成任务,并且因为init()再次被调用,它会假定前一个文件仍然被锁定并创建一个新的日志文件.

我试图使用destroy()和finalize()来关闭处理程序,但它不起作用.任何人都知道如何解决这个问题?

另一个小问题是:如果init()尚未完成并且页面被刷新,实际发生了什么.它是否会继续这个过程并最终导致调用destroy()或它是否只是停在那里?

java logging applet handler java.util.logging

5
推荐指数
1
解决办法
3762
查看次数

使用Looper.getMainLooper()初始化的处理程序不响应消息回调

我正在尝试实现从不同线程监听同一个Looper的Handler.

下面我有两个处理程序,一个在主线程中创建,另一个在子线程中,但是两个都初始化为侦听Main Looper.

private Handler mMain;
public static final ThreadPoolExecutor tpe =
        (ThreadPoolExecutor) Executors.newCachedThreadPool();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mMain = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(Message msg) {
            Log.wtf("", "main:" + msg);
        }
    };

    tpe.execute(new Runnable() {
        private Handler tChild = new Handler(Looper.getMainLooper()) {
            @Override
            public void handleMessage(Message msg) {
                Log.wtf("", "child:" + msg);
            }
        };

        @Override
        public void run() {
            Log.wtf("", "send msg to main looper");
            tChild.sendEmptyMessage(100);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但是当我发送如下消息时,只有子处理程序打印消息.主处理程序不接收消息.

03-20 22:02:26.754: A/(12857): …
Run Code Online (Sandbox Code Playgroud)

multithreading android handler looper

5
推荐指数
1
解决办法
8384
查看次数

Eclipse冲突处理程序

在开发eclipse插件时,我在带有id crtc_v4.session的Manifest扩展中使用默认处理程序crtc_v4.handlers.StartSession创建了一个命令,我在清单中为此命令添加了一个处理程序,此处理程序根据变量crtc_v4.sessionvar启用命令.

控制台上出现的问题是:

!MESSAGE Conflicting handlers for crtc_v4.session:  {crtc_v4.handlers.StartSession@98bc5c} vs {crtc_v4.handlers.StartSession@1265d09}
Run Code Online (Sandbox Code Playgroud)

但它不会阻止运行插件.我问的是这个问题的解决方案,以及它是否会影响我的插件的性能?

编辑:

定义命令的代码段:

 <extension
     point="org.eclipse.ui.menus">
  <menuContribution
        allPopups="false"
        locationURI="toolbar:org.eclipse.ui.main.toolbar">
     <toolbar
           id="crtc_v5.crtctoolbar">
        <command
              commandId="crtc_v5.session"
              icon="icons/neutral.png"
              label="Start Session"
              style="push">
        </command>
     </toolbar>
  </menuContribution>
Run Code Online (Sandbox Code Playgroud)

定义处理程序的代码段:

 </extension>
      <command
        defaultHandler="crtc_v5.handlers.StartSession"
        id="crtc_v5.session"
        name="session">
  </command>
 </extension>
Run Code Online (Sandbox Code Playgroud)

这是对sessionvar的启用:

  <extension
     point="org.eclipse.ui.handlers">
  <handler
        class="crtc_v5.handlers.StartSession"
        commandId="crtc_v5.session">
     <enabledWhen>
        <with
              variable="crtc_v5.sessionvar">
           <equals
                 value="LOGGEDIN">
           </equals>
        </with>
     </enabledWhen>
  </handler>
Run Code Online (Sandbox Code Playgroud)

eclipse-plugin manifest eclipse-rcp handler

5
推荐指数
1
解决办法
4655
查看次数

iOS未捕获异常处理程序未调用

我遇到的情况类似于未调用的未捕获异常处理程序,但他是Mac应用程序,而我是iOS应用程序。解决方案是使用ExceptionHandler框架,但是在iOS上不可用。

我有一个全新的iOS单视图应用程序,它只有几行代码,所以我不会粘贴整个文件。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
    NSSetUncaughtExceptionHandler(&handler);
    @throw NSInternalInconsistencyException;
    return YES;
}

void handler()                                                                              
{
    NSLog(@"hello world");                                                                  
}
Run Code Online (Sandbox Code Playgroud)

因此,didFinishLaunchingWithOptions我设置了自定义异常处理程序,然后强制崩溃。然后将异常处理程序打印hello world到控制台,但这不会发生。在处理程序中放置断点表明执行未进入方法。但是无论如何,异常都会打印到控制台(默认操作)。

2014-07-24 08:58:25.476 Exception[430:70b] *** Terminating app due to uncaught exception of class '__NSCFConstantString'
libc++abi.dylib: terminating with uncaught exception of type __NSCFConstantString
Run Code Online (Sandbox Code Playgroud)

我的处理程序在某处之后是否可以默认设置另一个异常处理程序?

更新

我决定将强制崩溃的方式从更改NSInternalInconsistencyException为[[NSArray arrayWithObject:@"object"] objectAtIndex:1];。现在将调用该处理程序并将hello world其打印到控制台。

所以现在的问题是,为什么没有NSINternalInconsistencyException导致处理程序被调用?错误略有不同:

2014-07-24 10:13:51.333 Exception[1474:70b] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** …
Run Code Online (Sandbox Code Playgroud)

exception handler ios

5
推荐指数
0
解决办法
804
查看次数

如何从Laravel发送Log事件到Loggly?

我想将Monra日志从我的Laravel 5.1应用程序发送到Loggly.com在线日志管理服务.从所有可能的环境,包括当地的发展.

handler laravel monolog loggly

5
推荐指数
1
解决办法
1501
查看次数