1.Activity启动Service时,使用Bundle传数据,仅使用Intent未测试
1 |
|
Service中接收
1 |
|
参考1:https://www.cnblogs.com/jeffen/p/6835622.html
参考2:https://blog.csdn.net/qq_36895346/article/details/78843415
2.为何Adapter中设置了get某数据的方法,Activity中却无法获取,按钮点击仍无法获取数据???
3.Android线程创建与销毁,通过Handler
https://www.cnblogs.com/ccdc/p/3837798.html
问题,服务中定义子线程,stopService()后于Service的onDestroy中销毁线程失败???
即handler.removeCallbacks(killAppRunnable);未销毁子线程
4.服务中:子线程逻辑执行完将自动销毁,若子线程中通过while(true)不断循环,子线程如何结束?
外部设置标志位finishThreadFlag = true, onDestroy()中设置finishThreadFlag = false使得服务销毁时子线程也销毁->测试成功
5.Android进阶之进程优先级及提高优先级的方法(Service进程防杀死)
http://www.voidcn.com/article/p-tlhnbjyl-od.html
6.
Make Project:编译Project下所有Module,一般是自上次编译后Project下有更新的文件,不生成apk。
Make Selected Modules:编译指定的Module,一般是自上次编译后Module下有更新的文件,不生成apk。
Clean Project:删除之前编译后的编译文件,并重新编译整个Project,比较花费时间,不生成apk。
Rebuild Project:先执行Clean操作,删除之前编译的编译文件和可执行文件,然后重新编译新的编译文件,不生成apk,效果跟Clean Project一致
Build APK:前面4个选项都是编译,没有生成apk文件,如果想生成apk,需要点击Build APK。
Generate Signed APK:生成有签名的apk。
注意:
对于Clean和Rebuild看到最后的效果是一样的。
平时小的改动直接用Make Project就可以,可以看到只有它有快捷方式,表明这个功能要经常用。对于一些大的改动比如更新lib,大功能修改等,用Clean或Rebuild,毕竟这两个编译起来要费时间。
如果有的时候死活编译不过,多试试Clean吧,会有意想不到的效果!
7.SparseArray Android特有类
可看作key是integer类型的HashMap,SparseArray要比 HashMap 节省内存,某些情况下比HashMap性能更好,SparseArray删除数据的时候也做了优化。
https://developer.android.com/reference/android/util/SparseArray
8.Android 中从res/values/strings.xml中读取具体的字符串的方法String mess = getResources().getString(R.string.mess_1);
关键点android 字符串比较,android 截取字符串,android 字符串,android 字符串数组,androidpost字符串,android 字符串转换,
字符串资源的定义,文件路径:res/values/strings.xml
字符串资源定义示例:
1 |
|
12.获取Android文件夹
存储卡根目录:Environment.getExternalStorageDirectory().toString()
Download目录路径字符串:Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS).toString()
Environment类
public static String DIRECTORY_ALARMS;
public static String DIRECTORY_DCIM;
public static String DIRECTORY_DOCUMENTS;
public static String DIRECTORY_DOWNLOADS;
public static String DIRECTORY_MOVIES;
public static String DIRECTORY_MUSIC;
public static String DIRECTORY_NOTIFICATIONS;
public static String DIRECTORY_PICTURES;
public static String DIRECTORY_PODCASTS;
public static String DIRECTORY_RINGTONES;
//:/system
String rootDir = Environment.getRootDirectory().toString();
System.out.println(“Environment.getRootDirectory()=:” + rootDir);
//:/data 用户数据目录
String dataDir = Environment.getDataDirectory().toString();
System.out.println(“Environment.getDataDirectory()=:” + dataDir);
//:/cache 下载缓存内容目录
String cacheDir = Environment.getDownloadCacheDirectory().toString();
System.out.println(“Environment.getDownloadCacheDirectory()=:” + cacheDir);
//:/mnt/sdcard或者/storage/emulated/0或者/storage/sdcard0 主要的外部存储目录
String storageDir = Environment.getExternalStorageDirectory().toString();
System.out.println(“Environment.getExternalStorageDirectory()=:” + storageDir);
//:/mnt/sdcard/Pictures或者/storage/emulated/0/Pictures或者/storage/sdcard0/Pictures
String publicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
System.out.println(“Environment.getExternalStoragePublicDirectory()=:” + publicDir);
//获取SD卡是否存在:mounted
String storageState = Environment.getExternalStorageState().toLowerCase();
System.out.println(“Environment.getExternalStorageState()=:” + storageState);
//设备的外存是否是用内存模拟的,是则返回true。(API Level 11)
boolean isEmulated = Environment.isExternalStorageEmulated();
System.out.println(“Environment.isExternalStorageEmulated()=:” + isEmulated);
//设备的外存是否是可以拆卸的,比如SD卡,是则返回true。(API Level 9)
boolean isRemovable = Environment.isExternalStorageRemovable();
System.out.println(“Environment.isExternalStorageRemovable()=:” + isRemovable);
//获取当前程序路径 应用在内存上的目录 :/data/data/com.mufeng.toolproject/files
String filesDir = context.getFilesDir().toString();
System.out.println(“context.getFilesDir()=:” + filesDir);
//应用的在内存上的缓存目录 :/data/data/com.mufeng.toolproject/cache
String cacheDir = context.getCacheDir().toString();
System.out.println(“context.getCacheDir()=:” + cacheDir);
//应用在外部存储上的目录 :/storage/emulated/0/Android/data/com.mufeng.toolproject/files/Movies
String externalFilesDir = context.getExternalFilesDir(Environment.DIRECTORY_MOVIES).toString();
System.out.println(“context.getExternalFilesDir()=:” + externalFilesDir);
//应用的在外部存储上的缓存目录 :/storage/emulated/0/Android/data/com.mufeng.toolproject/cache
String externalCacheDir = context.getExternalCacheDir().toString();
System.out.println(“context.getExternalCacheDir()=:” + externalCacheDir);
//获取该程序的安装包路径 :/data/app/com.mufeng.toolproject-3.apk
String packageResourcePath = context.getPackageResourcePath();
System.out.println(“context.getPackageResourcePath()=:” + packageResourcePath);
//获取程序默认数据库路径 :/data/data/com.mufeng.toolproject/databases/mufeng
String databasePat = context.getDatabasePath(“mufeng”).toString();
System.out.println(“context.getDatabasePath(”mufeng”)=:” + databasePat);
13.判断Android版本if (Build.VERSION.SDK_INT > 19) {...}
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {...}
14.打开自己APP的系统设置,Activity中可直接调用getPackageName()获取自身包名
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse(“package:” + getPackageName()));
startActivity(intent);
15.Android中检测当前是否为主线程
如果在Android中判断某个线程是否是主线程?对于这个问题,你可能说根据线程的名字,当然这个可以解决问题,但是这样是最可靠的么?万一某天Google一下子将线程的名字改称其他呢,下面是最可靠的方法
1 |
public static boolean isInMainThread() { |
近期评论