android部分知识,自己记住以免忘记

来源:互联网 发布:网络电视直播在线观看 编辑:程序博客网 时间:2024/05/20 01:35

1、cmd 中netstat -aon | findstr "5037" 找到占用ADB的进程,可以在path环境中配置新的端口号解决被占用问题;


2、DDMS 中发现打不开文件,是因为linux权限问题,可以在cmd中 adb -shell, 然后su获取最高权限, 接着chmod 755 或者 777 地址 例如:chmod 755 /data/* 赋权(此方法对开启root后的手机有效);


3、adb停止响应了, kill掉吧, adb kill-server,再启动 adb start-server;

 

4、asyncTask4.0版本以下有个bug,即looper的问题,如果不是在mainlooper下创建的,则会出现线程无法更新UI线程的异常,问题主要是源码中shandler初始化的时候会根据所在线程初始化,具体见源码,4.0以上版本已修复;asyncTask在3.0以下,你可以在里面启动多个线程去做你要求做的事情,但是3.0以后它只会在线程池中调用1个线程(具体几个忘记了,需要看下源码确定,底层是concurrent的Excector,集成了线程和排队的功能),这就是说在asyncTask中,完全是同步的情况排队调用你给的任务了;


5、wifi定位的原理是利用的不是你的手机,而是你接入的wifi,这个设备的接入路由一般不会变化,而且这个路由位置信息已经保存在服务商的数据库中,通过确定大概位置后,再计算你的手机跟其他同地区设备的距离算出你的确切位置;


6、定时器可以采用timetask或者alarmservice,但是alarmservice设置为ELAPSED_REALTIME_WAKEUP 时屏幕关闭后还会在后台运行;

 

7、如果有人问,想要根据name或者里面含有的属性动态去获取一个类或者android的 drawable、 ids等配置文件中的控件,然后去实例化,这个问题十有八九就是问哥们,你知道反射原理怎么在安卓中应用么,你就举个例子Field f = .class.getName("");就OK拉~


8、用android studio开发的时候发现Unable to execute dx,原来是build以后生成的Dex包中方法的数目实在太多了,超过了android定义的索引的最大值,这个时候intellij中就需要在setting的android compilers选择force jumbo mode,然后rebuild一下;eclipse的话就去project.properties文件中加入:dex.force.jumbo=true ,然后clean项目重新build解决,更好的方法就是去代码中减少function的数量吧。


9、获取应用列表:

        PackageManager packManager = this.getPackageManager();
        List<PackageInfo> paklist = packManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
        for (int i = 0; i < paklist.size(); i++) {
            PackageInfo packageInfo = (PackageInfo) paklist.get(i);
            if ((packageInfo.applicationInfo.flags & packageInfo.applicationInfo.FLAG_SYSTEM) <= 0) { // 非系统的应用程序

            }
        }

跳转其他app,

  PackageManager pm = getPackageManager();  Intent i = pm.getLaunchIntentForPackage(packageName);  startActivity(i);

加上intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);并且不finish掉当前的,可以保证调用完后结束能够回归之前的activity中。


10、Handler mHandler=new Handler();
       mHandler.post(new Runnable(){
              @Override
               public void run() {
                  // TODO Auto-generated method stub
              }
     });

根据handler处理messagequeue的方法,获取到message后,这个里面是个匿名Runnable对象,将会直接UI线程调用,所以处理页面的显示可以在里面,同样,因为是在ui线程调用的,所以别做复杂的运算。


11、jni开发的so,C代码一定要与java代码的包名,类名匹配


0 0