zoukankan      html  css  js  c++  java
  • android知识杂记(三)

    记录项目中的android零碎知识点,用以备忘。

    1、android 自定义权限
      app可以自定义属于自己的权限:

    <permission android:description="string resource" 
    android:icon="drawable resource" 
    android:label="string resource" 
    android:name="string" 
    android:permissionGroup="string" 
    android:protectionLevel=["normal" | "dangerous" | 
    "signature" | "signatureOrSystem"] />

    其中protectionLevel 为权限等级:
    1、normal:默认授予权限不提示用户;
    2、dangerous:安装声明此类权限时通知用户;
    3、signature:只对使用同一证书签名的APP开放;
    4、signatureOrSystem:在signature基础上,在ROM上增加自带APP声明;
    诸如:BroadcastReceiver + android:protectionLevel=signature,则只能接受相同签名APP发来的消息;

    2、android:process
      默认情况下,android为每一个应用创建一个进程,所有的组件运行于改进程下。进程名字为package名,如com.xx.xx;
      应用有自身独立的内存和资源控件,为了解决单进程的资源限制,android提供了应用内的多进程,比如在复杂绘制,频繁消息监听等独立进程。采用的就是android:process属性。
      <activity>,<service>, <receiver>, 和<provider> 都具备该属性。
      android:process = ":hello"
      android:process = ".hello"
      以":"开头,则表示这个进程是私有的;进程名为com.xx.xx:hello
      以小写字母开头,则表示这是一个全局进程,允许其它应用程序组件也在这个进程中运行,进程名为hello

    3、日志模块
      Android提供了较为成熟的日志模块,但在商用软件还用该加以扩展。
        1、在android外部存储中定义日志存储文件路径;
        2、调用日志工具类时,除原生log外,写入文件;
        3、写文件时注意单独起线程,可以利用:
          private static final Executor logger = Executors.newSingleThreadExecutor();
            logger.execute(new Runnable(//日志文件写入)}

    4、activity的android:configuration属性

    1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
    2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
    3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

    5、自定义view

       android的自定义view主要重写onDraw、onLayout、onMeasure,但后两者用于重写viewgroup的。onLayout用于设定childview的相对布局,而onMeasure用于WRAP_CONTENT时

    本viewgroup的大小,比如你内部有两个宽度20dp的imageView,那么自身宽度可能就是 20 *2 + 30。

    6、android 使用getDefaultUncaughtExceptionHandler 获取全局异常
    Android的“程序异常退出”,给用户体验造成不良影响,便可继承UncaughtExceptionHandler类来处理,
    通过Thread.setDefaultUncaughtExceptionHandler()对异常进行捕获处理。(事实上是java 5.0之后支持的) 代码示例如下:

    import java.lang.Thread.UncaughtExceptionHandler;
    
    public class App {
     
      public static void main(String[] args) {
        TestThread a = null;
     
        new TestThread("Fredric Test 1").start();
        new TestThread("Fredric Test 2").start();
        
        /*
         * 输出结果
            This is:Fredric Test 1,Message:/ by zero
            This is:Fredric Test 2,Message:/ by zero
        */
      }
    }
    
    class CrashHandler{
        
        private static CrashHandler instance;
        private UncaughtExceptionHandler handler;
        
        private CrashHandler(){
            handler = Thread.getDefaultUncaughtExceptionHandler();
            Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(){
    
                @Override
                public void uncaughtException(Thread t, Throwable e) {
                    System.out.println("This is:" + t.getName() + ",Message:"+ e.getMessage());
                    
                    handler.uncaughtException(t, e);
                }        
            });
        }
        
        public static CrashHandler getInstance(){
            if(null == instance){
                instance = new CrashHandler();
            }
            
            return instance;
        }
    }
    
    
    class TestThread extends Thread {
     
      public TestThread(String name) {
          this.setName(name);
          
          //在Application的onCreate中调用即可
          CrashHandler.getInstance();
      }
     
      public void run() {
        double i = 10 / 0;// 抛出异常的地方
      }
    }
  • 相关阅读:
    自定义类似smarty模板
    PHP函数相关知识点
    cookie的使用和设置
    进程通过内核缓存区请求设备I/O的一些事情
    多线程模型和问题
    C10K问题和多进程模型
    node.js----一个httpserver提交和解析get参数的例子
    nodejs解析url参数的三种方法
    node.js http模块和fs模块上机实验·
    c++中的srand()和rand() 转载 自:http://blog.sina.com.cn/s/blog_624c2c4001012f67.html
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4692393.html
Copyright © 2011-2022 走看看