标签: handler

每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
查看次数

覆盖或删除就绪处理程序

我必须修改使用jQuery的ready处理程序的站点,我不想重用代码而不必再次编写它,但是我需要更改原始就绪处理程序的行为,问题是:

  • 如何删除就绪处理程序(以应用新的处理程序)?
  • 或者如何覆盖现有的就绪处理程序(原始使用匿名函数)?

最好的祝福

jquery overriding handler ready

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

声音池没有完成播放整个文件

我有两个问题我想了解.

我正在使用soundPool我的声音效果,它的工作没有问题.但是,当我尝试播放cetain文件(25秒,大约400K)时,它不会播放整个文件仅3-4秒.

为什么以及如何解决它?

第二个问题是,我应该从线程中播放每个效果吗?很多线程都不错?

这是当前的代码:

static void play(final int soundID ){
    if(loaded){
        handler.post(new Runnable()
        {
        public void run()
        {
            soundpool.play(soundID, 1, 1, 1, 0, 1);
        }
        });
Run Code Online (Sandbox Code Playgroud)

android handler lag soundpool

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

处理程序,我想定期运行

使用handler想要定期运行计数为0,如果countis为1,否则请修复此代码.

mRunnable = new Runnable(){
  @Override
  public void run() {
    if (count == 0) {
      setImage();
      count = 1;
    } else {
      weather = mContentResolver.getType(mUri);
      setWeather(weather);
      count = 0;
    }
  } 
};
mHandler = new Handler();
mHandler.postDelayed(mRunnable, 3000);
Run Code Online (Sandbox Code Playgroud)

android handler ui-thread

5
推荐指数
2
解决办法
9403
查看次数

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
查看次数