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属性

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

5、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;// 抛出异常的地方
  }
}
时间: 2024-10-15 05:40:52

android知识杂记(三)的相关文章

Android知识杂记

1.Toast.makeTest(contest,test,duration); contest:上下文,一般为当前窗口,this test:提示框内容,字符串型 duration:时常,值为1或0,1为显示2s,0为1s Android知识杂记,码迷,mamicode.com

android知识杂记(一)

记录项目中用的零碎知识点,用以备忘. activity启动状态android:screenOrientation:portrait 限制横屏 singleTop 只执行一次,通常用在欢迎页面 singleTask 堆栈之上的activity都会被销毁,通常用于首个activity MAIN && LAUNCHE android.intent.action.MAIN 决定哪个activity先启动 android.intent.category.LAUNCHER 决定哪是否显示在程序列表里

Android知识杂记(四)

1.完整退出activity的设计思路 1.1 封装一个基础activity类 public abstract class RootActivity extends FragmentActivity{ 1.2 定义一个广播监听 private IntentFilter filter = new IntentFilter(FINISH_ACTION); private BroadcastReceiver receiver = new BroadcastReceiver() { @Override

android知识杂记(二)

记录项目中的android零碎知识点,用以备忘. AsyncQueryHandler 继承与handler,可以用于处理增删改(ContentProvider提供的数据) 例如:query = new AsyncQueryHandler(getContentResolver());  包括方法:startQuery.startInsert.startDelete.startUpdate: Uri uri = Sms.CONVESATION_URI; query.startQuery(0, nul

android 实践项目三

android 实践项目三 本周我主要完成的任务是将代码进行整合,然后实现百度地图的定位与搜索功能.在这次实现的 图形界面如下: 在本周的工作中主要的实现出来定位与收索的功能,在地图中能实现了定位,显示当前的位置, 不知到为什么不显示地图,经过查找资料可能因为当前的SDK本版太高了,不匹配.所以在下周 图像的显示问题.下面是我的主要贴上我的布局代码 地图的布局: 本周的总结 做项目是学习知识最快的方式,即能让我们碰见各种问题,也让我们去解决各种问题.在项目中感觉自己 的水平有限,还需要更加努力的

三、Android学习第三天——Activity的布局初步介绍(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 三.Android学习第三天——Activity的布局初步介绍 今天总结下Activity相关布局的一些知识: Activity最简单跟常用的布局分为两种: ①LinearLayout -- 线性布局 ②TableLayout -- 表格布局 ③RelativeLayout -- 相对布局(今后将会频繁的使用到这个布局) 下面来简单总结下前两种(线性/表格)布局当中常用到

android Graphics(三):区域(Range)

前言:最近几天对画图的研究有些缓慢,项目开始写代码了,只能在晚上空闲的时候捯饬一下自己的东西,今天给大家讲讲区域的相关知识,已经想好后面两篇的内容了,这几天有时间赶紧写出来给大家.有关界面开发的东东内容确实比较多,慢慢来吧,总有一天会不一样. 我自己的一句警言,送给大家: 想要跟别人不一样,你就要跟别人不一样.----- Harvic 相关文章: 1.<android Graphics(一):概述及基本几何图形绘制>2.<android Graphics(二):路径及文字>3.&l

Android异步处理三:Handler+Looper+MessageQueue深入详解

Android Loop&Handle学习总结 - New Start - 博客频道 - CSDN.NET ?????? 昨晚偷懒,这篇博客只写了一个标题,今天早晨一看,还有15的阅读量.实在是对不起那些同学.......换了是我,也会BS这样的LZ吧!sorry 啦 -------------------------------------------------------------------------------------------------------------------

Android学习Scroller(三)——控件平移划过屏幕 (Scroller简单使用)

MainActivity如下: package cc.cn; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; /** * Demo描述: * Scroller使用示例--让控件平移划过屏幕 * * 参考资料: * http://blog.cs