随笔分类 - android
android的开发经验
摘要:在开发过程中,碰到这么一种需求,需要在后台开启一个service服务,每隔一个小时请求一次网络数据,并更新桌面的widget组件。可行的方法有两种:1,借助于定时器。在service的oncreate方法中timer=new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { //因为service是在后台运行,并不存在ui阻塞的问题,因此可以不另开一个线程去请求网络信息 ...
阅读全文
摘要:感觉四大组件中,activity(系统提供的拨号,发送短信的界面不用提了),service(有系统提供的服务),broadcast receiver(有一些系统广播,诸如电池电量等),intent(存在系统的相关intent),可见都有一些系统功能可以调用。现在将系统提供的相关intent进行归纳。1,利用系统提供的intent浏览网页Uri uri=Uri.parse("http://www.cloudsensing.cn:8090/aqi/beijing/daily?location=xcgy"); Intent it=new Intent(); ...
阅读全文
摘要:1,任务。一个应用程序整体看作一个task;就是用栈的方式组织一系列activity的集合,新加入的activity是位于栈顶的。2,activity的生命周期正常启动的调用顺序:oncreate->onstart(可见)->onresume(可见可交互);在结束时候的调用顺序是onPause(可见不可交互)->onStop(不可见)->onDestroy。在被停止的时候分为两种情况,如果先出的activity是全屏的那么顺序是onpause->onStop。(调用finsh方法或者内存不够的时候才会ondestory);恢复的时候是onStart->onR
阅读全文
摘要:Appwidget本质上还是一个广播:定义一个appwidget的方式如下:1,首先创建一个类,继承AppWidgetProvider,在其中重写需要重写的方法2,res下建立xml文件夹,建立元数据。包括指定高度,初始布局等等。<?xml version="1.0" encoding="utf-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minHeight="80px&
阅读全文
摘要:不少应用在按下返回按键的时候能够退出该应用,并且弹出返回对话框,其实现步骤如下:1,首先在点击返回键需要退出的界面增加成员变量public static ArrayList<Activity> allActivity = new ArrayList<Activity>(); 2,监听按键点击事件 public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.KEYCODE_BACK == keyCode) { exit(); } return...
阅读全文
摘要:1,listview的adapter数据发生变化的时候,可以使用函数adapter.notifyDataSetChanged()来通知进行改变2,应用中如果用户是第一次使用应用,程序要做的工作和点击刷新按钮的时候需要做的工作是相同的,如果是之后进入,就可以直接从保存历史数据的sp中读取,这个时候为了提高代码的复用程度,可以在初次进入的时候调用刷新按钮的performClick事件;另外注意发送网络请求之前,一定要检查设备是否联网。3,如果是进入的是若干个activity组成的tab页面,那么首先会调用第一个activity的oncreate方法,有些时候不能成功生成tab,出现空指针异常的原因
阅读全文
摘要:android 中textview显示富文本信息具有以下几种方式:1,利用富文本标签,类似于html标签,如<b>,<font>,<img>等,不过不能直接作为textview.setText的参数值,而应该静html.fromHtml方法将这些文本转换为charsequence对象。如果想要显示图片的时候,还需要实现imagegetter接口2,重写ondraw方法3,利用webview组件显示html页面4,textview中显示图片还可以使用imagespan对象,该对象用来封装bitmap对象,并通过spannableString对象封装images
阅读全文
摘要:今天犯下了低级错误,注意android中的LinearLayout的布局,放不下的时候不会依次排列,而是直接消失,所以一定要注意外层布局的layoutorientation属性!!布局文件是<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:la
阅读全文
摘要:1,对于上、下、左、右、居中的布局,一般采用layout_gravity的属性,不过对于Linerarlayout来说,属性为horizontal,那么例如bottom,center_vertical等值只在垂直方向有些属性未起作用,如果Linerarlayout的android:orientation的上起作用。2,如果是一个方向的布局,可以利用FrameLayout来进行布局,结合layout_gravity既可以实现精确的布局效果。(如让三个按钮分别左对齐,居中对齐,右对齐)。这个使用FrameLayout最容易实现,也可以利用嵌套的Linerarlayout实现,(4个,内层的三个an
阅读全文
摘要:本次实现的是类似于墨迹天气中轨迹图片上指针随着数值滚动滑动的效果,基本思路是开启线程,控制指针所在的imageview控件的padding属性。 <FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#fff" android:paddingBottom="5dp" android:paddingLeft="5dp" ...
阅读全文
摘要:本次项目中要求实现底部标签的tabActivity,方法一:因为发现利用tabhost自身的tabwidget很难实现要求,因此在布局文件中将tabwidget属性设置为不可见,自己进行布局。<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_
阅读全文
摘要:android自定义组件的方法是自定义一个类继承view;重写其ondraw方法,如果需要随时间动态改变的效果,那么启动timer计时器。这其中存在一个问题,如果绘图直接在view上进行,那么可能之前绘制的图形就会消失。解决的方法就是利用双缓冲技术。所谓双缓冲技术,就是首先将图形绘制到内存中的一个位图上(bitmap,这就是缓冲),之后再将整个位图一次性的绘制到组件上。
阅读全文
摘要:在android的单元测试中,因为涉及到了其他函数的层层调用,涉及到多线程,结果出现以下问题。1)在主线程之外的其他线程中设置断点,但是毫无效果,因为转化为利用日志log.v()的方式进行调试。2)结果发现,在多个地方log.v的时候,会出现每次打印的日志信息条数不同的情况,而且不能将所有的日志信息打印完全。3)考虑可能是一旦主线程运行结束,单元测试便完结所导致,因此主线程之外的线程中的有些log.v来不及打印,在单元测试的主线程中令线程休眠一段时间Thread.sleep(1000),发现上面一个问题得到解决。4)另一方面,测试的模块中具有利用handler进行消息传递的机制,发现即使令主线
阅读全文
摘要:1,在配置文件中写入操作权限<!-- 想sdcard中创建或者删除文件的权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission><!-- 向sdcard中写入数据的权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permi
阅读全文