posts - 93,  comments - 2,  trackbacks - 0
 
     摘要: android中跨进程通讯的4种方式 转自:http://www.cnblogs.com/sevenyuan/archive/2013/03/22/2975122.html由于android系统中应用程序之间不能共享内存。因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用...  阅读全文
posted @ 2015-06-24 17:28 Terry Zou 阅读(493) | 评论 (0)编辑 收藏

Android 手机上的应用一般情况下都在一个进程中运行。

但是,也可以指定Activity或者Service在Remote 进程中执行。多数情况下,只有在用户认为应用退出后还需要继续后台长期运行的应用,才需要这样做。此时,该应用有两个进程。

还有一种hack的方式,在apk中通过调用命令行来启动另外的进程。此种方式用户不可见,也不安全。不提倡。

posted @ 2015-06-24 17:12 Terry Zou 阅读(538) | 评论 (0)编辑 收藏

官网帮助文档链接:
 http://developer.android.com/guide/components/fragments.html

主要看两张图,和跑代码

一,Fragment的生命周 

          

二,与Activity生命周期的对比

     

场景演示 : 切换到该Fragment

11-29 14:26:35.095: D/AppListFragment(7649): onAttach
11-29 14:26:35.095: D/AppListFragment(7649): onCreate
11-29 14:26:35.095: D/AppListFragment(7649): onCreateView
11-29 14:26:35.100: D/AppListFragment(7649): onActivityCreated
11-29 14:26:35.120: D/AppListFragment(7649): onStart
11-29 14:26:35.120: D/AppListFragment(7649): onResume

屏幕灭掉:

11-29 14:27:35.185: D/AppListFragment(7649): onPause
11-29 14:27:35.205: D/AppListFragment(7649): onSaveInstanceState
11-29 14:27:35.205: D/AppListFragment(7649): onStop


屏幕解锁

11-29 14:33:13.240: D/AppListFragment(7649): onStart
11-29 14:33:13.275: D/AppListFragment(7649): onResume


切换到其他Fragment:
11-29 14:33:33.655: D/AppListFragment(7649): onPause
11-29 14:33:33.655: D/AppListFragment(7649): onStop
11-29 14:33:33.660: D/AppListFragment(7649): onDestroyView


切换回本身的Fragment:

11-29 14:33:55.820: D/AppListFragment(7649): onCreateView
11-29 14:33:55.825: D/AppListFragment(7649): onActivityCreated
11-29 14:33:55.825: D/AppListFragment(7649): onStart
11-29 14:33:55.825: D/AppListFragment(7649): onResume

回到桌面

11-29 14:34:26.590: D/AppListFragment(7649): onPause
11-29 14:34:26.880: D/AppListFragment(7649): onSaveInstanceState
11-29 14:34:26.880: D/AppListFragment(7649): onStop

回到应用

11-29 14:36:51.940: D/AppListFragment(7649): onStart
11-29 14:36:51.940: D/AppListFragment(7649): onResume


退出应用

11-29 14:37:03.020: D/AppListFragment(7649): onPause
11-29 14:37:03.155: D/AppListFragment(7649): onStop
11-29 14:37:03.155: D/AppListFragment(7649): onDestroyView
11-29 14:37:03.165: D/AppListFragment(7649): onDestroy
11-29 14:37:03.165: D/AppListFragment(7649): onDetach


比Activity多了一些生命周期,完整和Activity对接上,大家好好利用。

转载:http://blog.csdn.net/forever_crying/article/details/8238863/

posted @ 2015-06-24 16:05 Terry Zou 阅读(431) | 评论 (0)编辑 收藏
ANR(Application Not Responding)
    ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应对话框(ANR:Application Not Responding),用户可以选择“等待”让应用程序继续运行,也可以选择“强制关闭”。所以一个顺畅合理的应用程序不会出现ANR,而让用户处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。
    默认情况下,Android的Activity执行时间为5s,BroadcastReceiver的最长执行时间为10s.
    第一,什么会引发ANR
    在Android里,应用程序响应由Activity Manager和WindowManager系统服务监视的,当它监听到一下一种情况时,Android就会针对特定的应用程序显示ANR:
    1).在5秒内没有响应输入事件(例如,按键按下,屏幕触摸)
    2).BroadcastReceiver在10秒内没有执行完毕
    造成以上两点多原因有很多,比如在主线程中做非常耗时的操作,比如下载,IO异常等。

    潜在的耗时操作,例如网络或数据库操作或者高耗时的计算如改变位图尺寸,这些操作应该放在子线程中(或者以数据库为例,通过异步请求的方式)来完成,然而,不是说你的主线程阻塞在那里等待子线程来完成--也不用调用Thread.wait()或Thread.sleep();替代的方法是主线程需要为子线程提供一个handler,以便完成时能够交给主线程,以这种方式设计你的应用程序,将能保证你的主线程保持对输入的响应性并能避免由于5秒输入事件的超时引发的ANR对话框。
    第二,如何避免ANR
    1.运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message的方式做一些操作,比如更新主线程中的ui等)
    2.应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为 BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。(此处需要注意的是可以在广播接受者中启动Service,但是却不可以在Service中启动broadcasereciver,关于原因后续会有介绍,此处不是本文重点)
    3.避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广 播时需要向用户展示什么,你应该使用Notification Manager来实现。

    总结:anr异常也是在程序中自己经常遇到的问题,主要的解决办法自己最常用的就是不要在主线程中做耗时的操作,而应放在子线程中来实现,比如采用Handler+mesage的方式,或者是有时候需要做一些和网络相互交互的耗时操作就采用asyntask异步任务的方式(它的底层其实Handler+mesage有所区别的是它是线程池)等,在主线程中更新UI。
posted @ 2015-06-24 16:00 Terry Zou 阅读(297) | 评论 (0)编辑 收藏
     摘要: String string=" 欢迎你来到的 jack 的 android 使用技术总结 ";                  TextV iew info2=(TextView)super.findV iewById(R.id.info); ...  阅读全文
posted @ 2015-06-15 14:21 Terry Zou 阅读(219) | 评论 (0)编辑 收藏
     摘要: 开发自定义控件的步骤: 1、了解View的工作原理  2、 编写继承自View的子类 3、 为自定义View类增加属性  4、 绘制控件  5、 响应用户消息  6 、自定义回调函数  一、View结构原理 Android系统的视图结构的设计也采用了组合模式,即View作为所有图形的基类,Viewgroup对View继承...  阅读全文
posted @ 2015-05-19 17:29 Terry Zou 阅读(364) | 评论 (0)编辑 收藏
     摘要: Android 管理Fragments              FragmentManager           为了管理Activity中的fragments,需要使...  阅读全文
posted @ 2015-05-18 18:28 Terry Zou 阅读(400) | 评论 (0)编辑 收藏

java.version

Java 运行时环境版本

java.vendor

Java 运行时环境供应商

java.vendor.url

Java 供应商的 URL

java.home

Java 安装目录

java.vm.specification.version

Java 虚拟机规范版本

java.vm.specification.vendor

Java 虚拟机规范供应商

java.vm.specification.name

Java 虚拟机规范名称

java.vm.version

Java 虚拟机实现版本

java.vm.vendor

Java 虚拟机实现供应商

java.vm.name

Java 虚拟机实现名称

java.specification.version

Java 运行时环境规范版本

java.specification.vendor

Java 运行时环境规范供应商

java.specification.name

Java 运行时环境规范名称

java.class.version

Java 类格式版本号

java.class.path

Java 类路径

java.library.path

加载库时搜索的路径列表

java.io.tmpdir

默认的临时文件路径

java.compiler

要使用的 JIT 编译器的名称

java.ext.dirs

一个或多个扩展目录的路径

os.name

操作系统的名称

os.arch

操作系统的架构

os.version

操作系统的版本

file.separator

文件分隔符(在 UNIX 系统中是“/”)

path.separator

路径分隔符(在 UNIX 系统中是“:”)

line.separator

行分隔符(在 UNIX 系统中是“/n”)

user.name

用户的账户名称

user.home

用户的主目录

user.dir

用户的当前工作目录

StringBuffer response = new StringBuffer();
while ((line = reader.readLine()) != null) {
    response.append(line).append(
    System.getProperty("line.separator"));
}

public class SystemProperty {
 public static void main(String args[]) {  
    System.out.println("java_vendor:" + System.getProperty("java.vendor"));  
    System.out.println("java_vendor_url:"  
             + System.getProperty("java.vendor.url"));  
    System.out.println("java_home:" + System.getProperty("java.home"));  
    System.out.println("java_class_version:"  
             + System.getProperty("java.class.version"));  
    System.out.println("java_class_path:"  
            + System.getProperty("java.class.path"));  
    System.out.println("os_name:" + System.getProperty("os.name"));  
    System.out.println("os_arch:" + System.getProperty("os.arch"));  
    System.out.println("os_version:" + System.getProperty("os.version"));  
    System.out.println("user_name:" + System.getProperty("user.name"));  
    System.out.println("user_home:" + System.getProperty("user.home"));  
    System.out.println("user_dir:" + System.getProperty("user.dir"));  
    System.out.println("java_vm_specification_version:"  
            + System.getProperty("java.vm.specification.version"));  
    System.out.println("java_vm_specification_vendor:"  
            + System.getProperty("java.vm.specification.vendor"));  
    System.out.println("java_vm_specification_name:"  
            + System.getProperty("java.vm.specification.name"));  
    System.out.println("java_vm_version:"  
            + System.getProperty("java.vm.version"));  
    System.out.println("java_vm_vendor:"  
            + System.getProperty("java.vm.vendor"));  
    System.out  
            .println("java_vm_name:" + System.getProperty("java.vm.name"));  
    System.out.println("java_ext_dirs:"  
            + System.getProperty("java.ext.dirs"));  
    System.out.println("file_separator:"  
            + System.getProperty("file.separator"));  
    System.out.println("path_separator:"  
            + System.getProperty("path.separator"));  
    System.out.println("line_separator:"  
            + System.getProperty("line.separator"));  
}  
转载:http://blog.csdn.net/kongqz/article/details/3987198
posted @ 2015-05-15 09:33 Terry Zou 阅读(396) | 评论 (0)编辑 收藏
当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候。 
注意上面的双引号,何为“容易”?言下之意就是该activity还没有被销毁,而仅仅是一种可能性。这种可能性有哪些?通过重写一个activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清楚地知道当某个activity(假定为activity A)显示在当前task的最上层时,其onSaveInstanceState方法会在什么时候被执行,有这么几种情况: 
1、当用户按下HOME键时。 
这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则 
2、长按HOME键,选择运行其他的程序时。 
3、按下电源按键(关闭屏幕显示)时。 
4、从activity A中启动一个新的activity时。 
5、屏幕方向切换时,例如从竖屏切换到横屏时。
 
在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行。 
总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。 
至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行。 
另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原。
 
转载:http://gundumw100.iteye.com/blog/1115080
posted @ 2015-05-11 10:34 Terry Zou 阅读(339) | 评论 (0)编辑 收藏

Android中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shape有了大体的了解,稍作总结:

先看下面的代码:
        <shape>
            <!-- 实心 -->
            <solid android:color="#ff9d77"/>
            <!-- 渐变 -->
            <gradient
                android:startColor="#ff8c00"
                android:endColor="#FFFFFF"
                android:angle="270" />
            <!-- 描边 -->
            <stroke
                android:width="2dp"
                android:color="#dcdcdc" />
            <!-- 圆角 -->
            <corners
                android:radius="2dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>

solid:实心,就是填充的意思
android:color指定填充的颜色

gradient:渐变
android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍
另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。

stroke:描边
android:width="2dp" 描边的宽度,android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth="5dp" 
android:dashGap="3dp"
其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。

corners:圆角
android:radius为角的弧度,值越大角越圆。
我们还可以把四个角设定成不同的角度,方法为:
<corners 
        android:topRightRadius="20dp"    右上角
        android:bottomLeftRadius="20dp"    右下角
        android:topLeftRadius="1dp"    左上角
        android:bottomRightRadius="0dp"    左下角
 />
这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。
还有网上看到有人说设置成0dp无效,不过我在测试中发现是可以的,我用的是2.2,可能修复了这个问题吧,如果无效的话那就只能设成1dp了。

padding:间隔
这个就不用多说了,XML布局文件中经常用到。


大体的就是这样,以下是一个使用的具体示例:用在Selector中作为Button的背景,分别定义了按钮的一般状态、获得焦点状态和按下时的状态,具体代码如下:

main.xml:
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TestShapeButton"
    android:background="@drawable/button_selector"
    />


button_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <!-- 渐变 -->
            <gradient
                android:startColor="#ff8c00"
                android:endColor="#FFFFFF"
                android:type="radial"
                android:gradientRadius="50" />
            <!-- 描边 -->
            <stroke
                android:width="2dp"
                android:color="#dcdcdc"
                android:dashWidth="5dp" 
                android:dashGap="3dp" />
            <!-- 圆角 -->
            <corners
                android:radius="2dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item android:state_focused="true" >
        <shape>
            <gradient
                android:startColor="#ffc2b7"
                android:endColor="#ffc2b7"
                android:angle="270" />
            <stroke
                android:width="2dp"
                android:color="#dcdcdc" />
            <corners
                android:radius="2dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item>       
        <shape>
            
<solid android:color="#ff9d77"/>
            <stroke
                android:width="2dp"
                android:color="#fad3cf" />
            <corners 
                android:topRightRadius="5dp"
                android:bottomLeftRadius="5dp"
                android:topLeftRadius="0dp"
                android:bottomRightRadius="0dp"
            />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>

运行效果如下图:

一般状态:

 

获得焦点状态:

 

按下状态:


转载:http://kofi1122.blog.51cto.com/2815761/521605/

posted @ 2015-04-18 10:41 Terry Zou 阅读(260) | 评论 (0)编辑 收藏
仅列出标题
共8页: 上一页 1 2 3 4 5 6 7 8 下一页 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

Java

搜索

  •  

最新随笔

最新评论

阅读排行榜

评论排行榜