当我在寻找创建和更新SQlite数据库以在Android应用程序中使用的工具时,我建议使用SQLite数据库浏览器.它有一个Windows GUI,功能相当强大,特别提供了一个菜单选项,可以将数据从CSV文件导入新表.
事实证明,这对于数据库的初始创建非常有用,并且每当我要添加新数据时,我一直使用CSV导入选项来更新数据库.
当只有少数记录要导入时,这种方法运行良好,但随着数据量的增长,这个过程变得非常缓慢.一个11,000条记录(800千字节)的数据文件大约需要10分钟才能导入我平均速度很慢的笔记本电脑.使用SQLite数据库浏览器删除旧表,运行导入命令,然后更正由import命令创建的新表的数据类型的整个过程最多需要15分钟.
如何加快进口?
在获得定位时,Android LocationManager有时会使用数兆字节的互联网数据吗?如果是这样,在什么情况下?即使使用LocationManager的应用程序没有明确的访问权限的权限,它是否会发生?
我问这个是因为我最近注意到"Android OS"使用的互联网数据(我在Samsung Galaxy Note with Android 4.0.4上的设置 - >"数据使用"屏幕上报告)有时每天10兆字节或更多.实验表明,只有当我运行我编写的应用程序并使用位置管理器提供的GPS位置数据时才会出现此数据使用情况.当此应用未运行时,"Android OS"每天仅使用几千字节的数据.
应用程序清单中的唯一权限是"android.permission.ACCESS_FINE_LOCATION"和"android.permission.WRITE_EXTERNAL_STORAGE".没有互联网访问权限.
活动的onStart()方法包含代码:
if (!mapview .ignoreGPS ) {
lm.requestLocationUpdates(LocationManager. GPS_PROVIDER , gpsMinTime , gpsMinDistance , this );
}
Run Code Online (Sandbox Code Playgroud)
切换ignoreGPS标志时会调用类似的代码.
还有一个包含代码的gotoLastLocation()方法:
Location l = lm.getLastKnownLocation(LocationManager. GPS_PROVIDER );
if (l == null ) {
l = lm .getLastKnownLocation(LocationManager. NETWORK_PROVIDER);
}
Run Code Online (Sandbox Code Playgroud)
当忽略ignoreGPS标志或用户选择菜单选项以转到最后的已知位置时,此方法很少被调用.
除了这种很少被称为方法之外,没有引用"NETWORK_PROVIDER".
GPS_PROVIDER默认使用"辅助GPS"吗?如果是这样,这可能会使用数兆字节的数据吗?即使没有互联网许可?
如果GPS_PROVIDER无法通过GPS信号进行修复,则LocationManager默认使用手机网络吗?即使应用程序没有网络权限?这会被电话提供商视为互联网数据访问吗?
我希望我的应用程序检查"数据网络模式"或"移动数据"是否已启用,即使它当前未处于活动状态.换句话说,我需要检查该应用是否可能产生移动数据费用,即使手机当前通过WiFi连接也是如此.
通过谷歌搜索我发现以下代码检查"移动数据"是否"活动".
ConnectivityManager cm =
(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
Run Code Online (Sandbox Code Playgroud)
此代码的问题在于,如果WiFi处于活动状态,即使将其切换为开启状态,也不会将移动数据报告为活动数据.
可以修改代码以确定移动数据是否"已启用"并因此可能是活动的,而不是与此代码一样,无论它是否是当前活动的连接模式?
我发现在一次或多次屏幕旋转后性能下降,我认为这很可能是因为每次屏幕旋转时应用程序的主Activity都会被销毁并重新创建,而且我的应用程序必须在发生这种情况时泄漏内存.
我已经读过,与人们的预期相反,并不是当活动被销毁时,应用程序的主Activity(或者Activity中调用的类)创建的所有对象都不会被销毁.具体来说,我想我已经读过(虽然我现在无法找到),如果View使用一个大的位图成员对象,那么Activity的onDestroy()方法应该被覆盖,并且应该显式地回收位图.
销毁活动时是否还需要销毁或删除其他对象?听众怎么样?有关于这个主题的综合教程或指南吗?
我发现从SD卡上的文本文件一次读取一行是相当慢的.我想如果文件在内部存储器中可能会更快,所以我想将文件从SD卡复制到内部存储器.
我可以在网上找到的文件复制示例似乎涉及一次一个字节从InputStream复制到OutputStream或从FileReader复制到FileWriter.这真的是最快捷,最有效的方法吗?
android ×4
connection ×1
copy ×1
csv ×1
file-io ×1
gps ×1
import ×1
memory-leaks ×1
object ×1
sqlite ×1