当前位置: 首页 > news >正文

只做一种产品的网站/自己做网站的流程

只做一种产品的网站,自己做网站的流程,线上推广的优势,做网站是找什么人之前的项目里要做一个异步更新UI的功能,可是结果出现了ANR,所以想写个demo来測试究竟是哪个地方出现了问题,结果发现原来的思路是没有问题,郁闷~~ 如今这个demo 就是模拟项目里面 的步骤 1、接收到系统的广播(如今模拟…

之前的项目里要做一个异步更新UI的功能,可是结果出现了ANR,所以想写个demo来測试究竟是哪个地方出现了问题,结果发现原来的思路是没有问题,郁闷~~

如今这个demo 就是模拟项目里面 的步骤

1、接收到系统的广播(如今模拟为人工发送)

2、广播接收到后,handler通知异步线程从网上下载数据,是异步(模拟为sleep)

3、数据下载完后handler再通知UI更新


以下是基本的两个代码,可以正确执行


package com.example.testanr;import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends ActionBarActivity {public 	TextView hellworld = null;public 	Button sendBroadcast = null;public final static String MY_ACTION = "com.example.testanr.MY_ACTION";public static int i = 0;public Handler updateUI  =new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if(msg.arg1 ==0){hellworld.setText("更新UI - "+ i);i++;}}};public Handler mHandler =new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if (msg.arg1 == 1  ){new Thread(new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("Thread id is "+Thread.currentThread().getId()+",and Thread name is "+Thread.currentThread().getName());try {Thread.currentThread().sleep(15000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}Message msg =new Message();msg.arg1 =0;updateUI.sendMessage(msg);}}).start();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);hellworld = (TextView)findViewById(R.id.hello_world);sendBroadcast = (Button)findViewById(R.id.sendBroadcast);//生成一个BroadcastReceiver对象TestReceiver  testReceiver = new TestReceiver(mHandler);//生成一个IntentFilter对象IntentFilter filter = new IntentFilter(); 		filter.addAction(MainActivity.MY_ACTION);//将BroadcastReceiver对象注冊到系统其中MainActivity.this.registerReceiver(testReceiver, filter); System.out.println("Thread id is "+Thread.currentThread().getId()+",and Thread name is "+Thread.currentThread().getName());sendBroadcast.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//发送广播Intent intent = new Intent();  intent.setAction(MainActivity.MY_ACTION);  sendBroadcast(intent);  }});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}


还有reciever

package com.example.testanr;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;public class TestReceiver extends BroadcastReceiver {public Handler handler;public Message message = null;public TestReceiver(Handler handler){this.handler = handler;}@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub//这里每次都要new,否者会报错message = new Message();message.arg1 = 1;handler.sendMessage(message);}}

如今才发现一个message是不能往MessageQueue里面发送多次的,否则会报这种错

java.lang.IllegalStateException: The specified message queue synchronization  barrier token has not been posted or has already been removed.

就说这个message的synchronization  barrier token 已经发送过了的

可是项目里面的问题还没有解决,回头找出原因再发上来


我们知道ANR一般有三种类型

1KeyDispatchTimeout(5 seconds) --主要类型

按键或触摸事件在特定时间内无响应

2BroadcastTimeout(10 seconds)

BroadcastReceiver在特定时间内无法处理完毕

3ServiceTimeout(20 seconds) --小概率类型

Service在特定的时间内无法处理完毕

所以原因还是应该是另外一种,可能没有模拟对


ANR的分析

怎样调查并解决ANR

1:首先分析log

2: trace.txt文件查看调用stack.

3: 看代码

4:细致查看ANR的成因(iowait?block?memoryleak?


可是项目里面log没有输出,是最奇怪的~~~

//************************************9-29更新****************8


回去一看果然是一个message往looper的messagequeue发送了多次!!!可是log没有输出exception,并且为什么会导致ANR,非常奇怪~~~求大神解答


转载于:https://www.cnblogs.com/blfshiye/p/4296424.html

http://www.lbrq.cn/news/1604341.html

相关文章:

  • 教育网站如何做seo/台州网站制作维护
  • 怎么自己创建一个平台/网络优化工程师有前途吗
  • 中国建设招标网站首页/飞猪关键词排名优化
  • 生物科技网站建设 中企动力北京/超级seo外链
  • 选择赣州网站建设/百度推广如何代理加盟
  • wap网站程序/体球网足球世界杯
  • 做网站后台的时候要注意什么/推广网站源码
  • 网站可以在手机上做吗/广州seo网站开发
  • app开发的网站/app软件推广平台
  • 在国内做电商网站需要什么审核/宜兴百度推广
  • 网站设计的背景/重庆seo快速优化
  • 新兴网站建设/北京it培训机构哪家好
  • 承接设计网站建设/搜索引擎营销简称seo
  • 手机功能网站案例/域名注册要多少钱
  • php网站安装图解/青岛seo整站优化哪家专业
  • wordpress utf8 gbk/深圳网站seo外包公司哪家好
  • 网站右键屏蔽/西安百度推广代理商
  • web网站开发毕业论文/郑州关键词seo
  • 龙华建网站/谷歌商店下载官网
  • 常州微信网站建设/什么是百度搜索推广
  • 自贡北京网站建设/打开一个网站
  • 电商会学着做网站呢/做网站设计的公司
  • 贵州安顺做公司网站/sem技术培训
  • 在哪里找人做网站靠谱/媒体宣传推广方案
  • 自己这么做网站/怎么开发网站
  • 青岛市住房和城乡建设局网站/重庆森林壁纸
  • wordpress 404自定义/网站优化是什么意思
  • wordpress精致主题/长沙网站seo公司
  • 运营商网站登录注册/公司个人怎么做网络推广
  • 购物网站建设成本/专业做网站官网
  • 嵌入式学习日志——数据结构(一)
  • SQL注入SQLi-LABS 靶场less31-38详细通关攻略
  • Python篇--- Python 的加载、缓存、覆盖机制
  • python匿名函数lambda
  • 中州养老项目:Mybatis自动填充拦截器
  • 半导体物理复习