我有一个4x4小部件,我想每15-20秒更新一小部分.显然,我不希望在手机处于待机状态时更新它.小部件还需要响应除我的计时器之外的一些系统事件.那么,哪个是最佳选择?
我还需要更新我的小部件的一小部分而不更新它的所有屏幕区域,这可能吗?
谢谢大家.
在组合一个简单的"时钟"应用程序时,我发现Android要求你使用生活在线程A中的android.os.Handler来更新线程A中的View对象,其中包含来自线程B的数据结果.
我还是比较新的Java,这是我以前第一次明确处理Threads,但我知道如果两个不同的线程想要访问相同的数据,通常会将方法和/或操作声明为synchronized .但是看起来android.os.Handler是一种特定于Android的线程之间同步数据的方式,这样你就可以避免我刚刚链接到的Oracle文档中详述的经典 并发错误.这是真的吗?
如果我发现自己的情况是Android操作系统要求我使用android.os.Handler将数据从一个线程传送到另一个线程,这是否意味着我不必声明用于派生该方法的方法数据同步?
我需要从处理线程制作一个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
我有以下简单的处理程序(为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")失败,"对象引用未设置为对象的实例".我不明白为什么会这样?
在Java util日志记录中,我在init()上启动处理程序,并在destroy()处关闭处理程序,它完全正常:创建了一个日志文件等.如果用户正常刷新页面,它仍然只创建一个日志文件.
但是,如果用户快速刷新applet的页面几次,看起来似乎没有调用destroy()或者没有完成任务,并且因为init()再次被调用,它会假定前一个文件仍然被锁定并创建一个新的日志文件.
我试图使用destroy()和finalize()来关闭处理程序,但它不起作用.任何人都知道如何解决这个问题?
另一个小问题是:如果init()尚未完成并且页面被刷新,实际发生了什么.它是否会继续这个过程并最终导致调用destroy()或它是否只是停在那里?
我必须修改使用jQuery的ready处理程序的站点,我不想重用代码而不必再次编写它,但是我需要更改原始就绪处理程序的行为,问题是:
最好的祝福
我有两个问题我想了解.
我正在使用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) 使用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) 我遇到的情况类似于未调用的未捕获异常处理程序,但他是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) 我想将Monra日志从我的Laravel 5.1应用程序发送到Loggly.com在线日志管理服务.从所有可能的环境,包括当地的发展.