`

view.post();经典的异常

阅读更多

   背景: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对象就是主线程要执行的,起一个过渡作用,不影响子线程的执行。



 

  • 大小: 40 KB
分享到:
评论

相关推荐

    基于Python的交易机器人使用TradingView.comwebhookJSON.zip

    2. **API接口**:使用TradingView的Webhook API,需要理解HTTP请求和响应的工作原理,以及如何在Python中使用requests库来发送GET或POST请求。 3. **JSON解析**:接收到的Webhook数据通常是以JSON格式传递的,因此...

    问题:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original

    在Android开发中,`android.view.ViewRootImpl$CalledFromWrongThreadException` 是一个常见的异常,它通常发生在尝试在非UI线程(主线程)中修改用户界面元素时。这个异常表明,只有创建视图的原始线程(即主线程)...

    c# .net后台post上传文件

    以上就是关于"C# .NET后台post上传文件"这一主题的主要知识点,包括HTTP POST请求、ASP.NET MVC框架的应用、文件上传的前端和后端处理、图片处理、存储策略以及安全性和异常处理等方面。在实际开发中,这些知识点将...

    TanTanRippleView-仿探探进入 扫描view.zip

    但这里涉及到对集合的添加和删除操作,如果同时进行会发生异常。解决如下,使用CopyOnWriteArrayList,并且移除通过:post {  rippleCircles.remove(this)  }然后在onDraw中,值得一提的是为了防止被扫描的部分挡住...

    Message消息的两种发送方式样例send和post

    其次,`post`方法则是`View`、`Handler`和`Runnable`都提供的方法。它实际上是在内部封装了一个`Runnable`对象,并通过`Handler`的`post()`方法发送。`post()`方法可以传递一个`Runnable`实例,当`Runnable.run()`被...

    Android 获得View宽高的几种方式总结

    Android 获得View宽高的几种方式总结 Android 中获得 View 宽高的几种方式总结是 Android ...获取 View 的宽高信息需要根据实际情况选择合适的方法,避免在不适当的情况下获取宽高信息,从而导致程序的崩溃或异常。

    CheckWeb.zip

    3. **异常处理**:在进行URL检测时,可能会遇到网络问题、无效URL或服务器错误等情况,这时候需要捕获和处理可能出现的异常,如HttpRequestException、UriFormatException等。 4. **异步编程**:为了提高性能,尤其...

    集成TradingView策略警报并执行期货DEX的自动交易_T.zip

    当你在TradingView中设置策略警报时,可以配置一个Webhook URL,当警报触发时,TradingView会向这个URL发送POST请求,携带相关的触发信息。 2. **后端处理**:接收到Webhook请求后,你需要有一个后端服务器来处理...

    ASP.NET MVC下基于异常处理的完整解决方案总结

    如果需要,系统会自动将用户重定向到与异常类型匹配的错误视图(ErrorView)。这需要维护一个异常类型与ErrorView之间的映射。 3. 如果异常处理策略不建议抛出异常,系统会尝试执行与当前Action相匹配的错误处理...

    基于wps在线编辑wps-view-java-master

    2. **Java编程**:整个系统是用Java语言开发的,这涉及到Java的基础语法、面向对象编程、异常处理、多线程等知识。同时,可能使用了Spring Boot或类似的框架来构建微服务架构。 3. **RESTful API设计**:为了与前端...

    基于Django Restframework的异常检测系统.zip

    在构建基于Django Restframework的异常检测系统时,我们需要深入理解Django框架和Restframework库的核心概念、功能以及它们如何协同工作以实现高效的数据处理和API接口开发。Django是Python Web开发的一个强大框架,...

    Kotlin案例分析.docx

    - **错误处理**:提供统一的错误处理机制,以便在发生异常时能够返回友好的错误消息。 以上两个案例分别展示了 Kotlin 在 Android 应用开发和 Web 开发领域的应用。通过这些实际场景的学习和实践,可以更好地理解 ...

    安卓自定义View实现图片上传进度

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据...实际开发中,可能需要考虑更多细节,如动画效果、异常处理、用户体验优化等。通过不断的实践和学习,开发者可以创造出更加丰富和个性化的UI组件。

    PyPI 官网下载 | flask_pundit-1.0.3-py2-none-any.whl

    pundit.can_view_post(current_user, post) # 检查权限 return render_template('view_post.html', post=post) ``` 在这个例子中,`can_view_post`策略检查用户是否是文章的作者,只有作者才能查看自己的文章。`...

    ZendFramework中文文档

    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. 添加选项别名 ...

    springMVC03.zip

    2. **Model-View-Controller**(MVC)架构模式:Spring MVC遵循这一经典设计模式,其中模型(Model)处理业务逻辑,视图(View)负责展示结果,而控制器(Controller)协调两者。 3. **@Controller**:这是Spring ...

    ASP.NET MVC 1.0 入门经典.rar

    9. **表单提交和路由**:阐述如何处理表单提交,包括POST请求,以及如何在控制器中处理这些请求。 10. **AJAX与jQuery**:如果包含这部分内容,会介绍如何结合ASP.NET MVC和jQuery进行异步请求,提升用户体验。 11...

    简单实现springmvc共26页.pdf.zip

    13. **异常处理**:通过 @ExceptionHandler 注解或配置 ExceptionResolver,可以优雅地处理应用中的异常。 14. **国际化的支持**:Spring MVC 提供了对多语言环境的支持,可以通过消息源(MessageSource)和 ...

    django开发post接口简单案例,获取参数值的方法

    2. **添加视图文件**:在项目的主目录 `Post` 下创建一个名为 `view.py` 的文件,并编写视图处理逻辑。在这个例子中,我们将实现一个名为 `post` 的视图函数,该函数用于处理 POST 请求,并从中提取参数 `a` 和 `b`...

Global site tag (gtag.js) - Google Analytics