背景:android一个视图的多个组件运行在同一个UI线程中。当一个组件占用这个ui线程时,其余的只能等待,造成屏幕卡死,用户等待时间长等缺点。
实例:在Java文件里找到两个xml的组件button1,button2.然后:
TranslateAnimation animation=new TranslateAnimation(0,200,0,0);
animation.setRepeatCount(30);
animation.setDuration(2000);
button1.setAnimation(animation);
button1进行周期性的水平移动,
button2.setOnClickListener(new OnClickListener(){
public void onClick(){
try {Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
button2的单击事件是让ui线程睡三秒钟。照成button1也不能正常运行。
措施1:为了避免多个组件同时使用一个ui线程的尴尬,可以创建一个新进程,让组件对应自己的线程。(不出现线程阻塞)
button2.setOnClickListener(new OnClickListener(){
public void onClick(){
new Thread(new Runnable(){
public void run(){
try {Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}).start();
}
}
});
以上虽然解决了线程阻塞的问题,但是也可能造成新的困扰。
button2.setOnClickListener(new OnClickListener(){
public void onclick(final View v){
new Thread(new Runnable(){
public void run(){
try {Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TextView tv=TextView(v);
v.setText(10+" ");
}).start();
}
}
});
例如想修改button按钮的值,就会出现新的异常(android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.),只有创建view的线程才能对组件进行修改。貌似和措施一相互违背(措施一说要创建新的线程)
措施2:为了同时满足以上的两个要求,Java的设计者推出了 view。post()方法。
button2.setOnClickListener(new OnClickListener(){
public void onclick(final View v){
new Thread(new Runnable(){
public void run(){
try {Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
v.post(new Runnable(){
TextView tv=TextView(v);
v.setText(10+" ");
});
}).start();
}
}
});
post方法里面的Runnable对象就是主线程要执行的,起一个过渡作用,不影响子线程的执行。
相关推荐
2. **API接口**:使用TradingView的Webhook API,需要理解HTTP请求和响应的工作原理,以及如何在Python中使用requests库来发送GET或POST请求。 3. **JSON解析**:接收到的Webhook数据通常是以JSON格式传递的,因此...
在Android开发中,`android.view.ViewRootImpl$CalledFromWrongThreadException` 是一个常见的异常,它通常发生在尝试在非UI线程(主线程)中修改用户界面元素时。这个异常表明,只有创建视图的原始线程(即主线程)...
以上就是关于"C# .NET后台post上传文件"这一主题的主要知识点,包括HTTP POST请求、ASP.NET MVC框架的应用、文件上传的前端和后端处理、图片处理、存储策略以及安全性和异常处理等方面。在实际开发中,这些知识点将...
但这里涉及到对集合的添加和删除操作,如果同时进行会发生异常。解决如下,使用CopyOnWriteArrayList,并且移除通过:post { rippleCircles.remove(this) }然后在onDraw中,值得一提的是为了防止被扫描的部分挡住...
其次,`post`方法则是`View`、`Handler`和`Runnable`都提供的方法。它实际上是在内部封装了一个`Runnable`对象,并通过`Handler`的`post()`方法发送。`post()`方法可以传递一个`Runnable`实例,当`Runnable.run()`被...
Android 获得View宽高的几种方式总结 Android 中获得 View 宽高的几种方式总结是 Android ...获取 View 的宽高信息需要根据实际情况选择合适的方法,避免在不适当的情况下获取宽高信息,从而导致程序的崩溃或异常。
3. **异常处理**:在进行URL检测时,可能会遇到网络问题、无效URL或服务器错误等情况,这时候需要捕获和处理可能出现的异常,如HttpRequestException、UriFormatException等。 4. **异步编程**:为了提高性能,尤其...
当你在TradingView中设置策略警报时,可以配置一个Webhook URL,当警报触发时,TradingView会向这个URL发送POST请求,携带相关的触发信息。 2. **后端处理**:接收到Webhook请求后,你需要有一个后端服务器来处理...
如果需要,系统会自动将用户重定向到与异常类型匹配的错误视图(ErrorView)。这需要维护一个异常类型与ErrorView之间的映射。 3. 如果异常处理策略不建议抛出异常,系统会尝试执行与当前Action相匹配的错误处理...
2. **Java编程**:整个系统是用Java语言开发的,这涉及到Java的基础语法、面向对象编程、异常处理、多线程等知识。同时,可能使用了Spring Boot或类似的框架来构建微服务架构。 3. **RESTful API设计**:为了与前端...
在构建基于Django Restframework的异常检测系统时,我们需要深入理解Django框架和Restframework库的核心概念、功能以及它们如何协同工作以实现高效的数据处理和API接口开发。Django是Python Web开发的一个强大框架,...
- **错误处理**:提供统一的错误处理机制,以便在发生异常时能够返回友好的错误消息。 以上两个案例分别展示了 Kotlin 在 Android 应用开发和 Web 开发领域的应用。通过这些实际场景的学习和实践,可以更好地理解 ...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据...实际开发中,可能需要考虑更多细节,如动画效果、异常处理、用户体验优化等。通过不断的实践和学习,开发者可以创造出更加丰富和个性化的UI组件。
在Spring MVC框架中,ModelAndView是一个非常重要的类,它用于处理控制器(Controller)与视图(View)之间的数据传递。本篇文章将深入探讨ModelAndView的使用细节,帮助你更好地理解和运用Spring MVC。 首先,理解...
pundit.can_view_post(current_user, post) # 检查权限 return render_template('view_post.html', post=post) ``` 在这个例子中,`can_view_post`策略检查用户是否是文章的作者,只有作者才能查看自己的文章。`...
6.3.1. 操作 Getopt 异常 6.3.2. 通过名字读取 (Fetching)选项 6.3.3. 报告选项 6.3.4. 读取非选项参数 6.4. 配置 Zend_Console_Getopt 6.4.1. 添加选项规则 6.4.2. 添加帮助信息 6.4.3. 添加选项别名 ...
2. **Model-View-Controller**(MVC)架构模式:Spring MVC遵循这一经典设计模式,其中模型(Model)处理业务逻辑,视图(View)负责展示结果,而控制器(Controller)协调两者。 3. **@Controller**:这是Spring ...
9. **表单提交和路由**:阐述如何处理表单提交,包括POST请求,以及如何在控制器中处理这些请求。 10. **AJAX与jQuery**:如果包含这部分内容,会介绍如何结合ASP.NET MVC和jQuery进行异步请求,提升用户体验。 11...
13. **异常处理**:通过 @ExceptionHandler 注解或配置 ExceptionResolver,可以优雅地处理应用中的异常。 14. **国际化的支持**:Spring MVC 提供了对多语言环境的支持,可以通过消息源(MessageSource)和 ...