Android 开发项目遇到的问题及解决

1.Android中ImageView控件的ScaleType属性用于控制不同大小的图片在屏幕中显示和裁剪方式;

2.只有容器是RelativeLayout的时候才有。此时设置为RelativeLayout里的子控件属性为android:layout_centerInParent=”true“,就是水平垂直都居中;

3.@Nullable @NonNull 这些注解是用来标注方法是否能传入null值,如果可以传入NUll值,则标记为nullbale,如果不可以则标注为Nonnull. 在我们做了一些不安全严谨的编码操作的时候,这些注释会给我们一些警告;

4.

Android提供了Invalidate方法實現界面刷新,但是Invalidate不能直接在線程中調用,因為他是違背了單線程模型:androidUI操作並不是線程安全的,並且這些操作必須在UI線程中調用。

invalidate()是用來刷新View的,必須是在UI線程中進行工作。在修改某個view的顯示時,調用invalidate()才能看到重新繪製的界面。invalidate()的調用是把之前的舊的view從主UI線程隊列中pop掉。一個Android 程序默認情況下也只有一個進程,但一個進程下卻可以有許多個線程。

在這麼多線程當中,把主要是負責控制UI界面的顯示、更新和控件交互的線程稱為UI線程,由於onCreate()方法是由UI線程執行的,所以也可以把UI線程理解為主線程。其餘的線程可以理解為工作者線程。

invalidate()得在UI線程中被調動,在工作者線程中可以通過Handler來通知UI線程進行界面更新。

postInvalidate()在工作者線程中被調用;

5.

放在assets文件夹下面的原生资源文件,放在这个文件夹下面的文件不会被R文件编译,所以不能直接使用.Android提供了一个工具类,方便我们操作获取assets文件下的文件:AssetManager。
AssetManager对象的获取

AssetManager assetManager = getAssets();

6.EncodingUtils 报错Cannot Resolve Symbol EncodingUtils   提示是:错误:程序包org.apache.http.util不存在 错误:找不到符号  符号:变量 EncodingUtils

解决办法

EncodingUtils是 HttpCore里面的,你的build.gradle里面没有依赖这个包,解决办法是在build.gradle文件里面的依赖关系里面填写下面这一句话,并sync Now即可 :


compile 'org.apache.httpcomponents:httpcore:4.4.4‘

 步骤

1,打开android studion 中项目的Project项目目录找到app目录下的build.gradle打开并添加compile 'org.apache.httpcomponents:httpcore:4.4.4‘,

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'org.apache.httpcomponents:httpcore:4.4.4'
}

2,转到项目类中导入

import org.apache.http.util.EncodingUtils;

3 gradle会提示你有变化,让你sync now 或者 sync again,点击 sync Now 一下即可

7.大多数控件都可以获取焦点,也就是处在选中状态。如果android:focusable属性值为true,表示可以通过键盘(虚拟键盘或物理键盘)或轨迹球将焦点移动到当前控件上。如果设置该属性为false,则无法将焦点移到当前控件。

8.focusableInTouchMode可以通过触摸获取焦点。

9.android setResult 是用于返回数据给上一个Activity的,也就是从新的Activity中返回数据给前一个Activity

10.

Android 五种数据存储的方式分别为:
1. SharedPreferences:以Map形式存放简单的配置参数;
2. ContentProvider:将应用的私有数据提供给其他应用使用;
3. 文件存储:以IO流形式存放,可分为手机内部和手机外部(sd卡等)存储,可存放较大数据;
4. SQLite:轻量级、跨平台数据库,将所有数据都是存放在手机上的单一文件内,占用内存小;
5. 网络存储 :数据存储在服务器上,通过连接网络获取数据;

Sharedpreferences是Android平台上一个轻量级的存储类,用来保存应用程序的各种配置信息,其本质是一个以“键-值”对的方式保存数据的xml文件,其文件保存在/data/data//shared_prefs目录下。在全局变量上看,其优点是不会产生Application 、 静态变量的OOM(out of memory)和空指针问题,其缺点是效率没有上面的两种方法高。

11.SharedPreferences负责根据key读取数据,而SharedPreferences.Editor则用写入数据。

12.Log.v("Tag","Msg");//Verbose  观察值,Verbose是冗长、啰嗦的意思,任何消息都会输出
Log.d("Tag","Msg");//Debug  调试
Log.i("Tag","Msg");//Info  信息,为一般提示性的消息
Log.w("Tag","Msg");//Warn  可能会出问题,一般用于系统提示开发者需要优化android代码等场景
Log.e("Tag","Msg");//Error  崩溃信息,一般用于输出异常和报错信息

13.

Android Context MODE的四种模式解析(转)

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND  

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。  

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;

MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。  
如果希望文件被其他应用读和写,可以传入:
openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);  

android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。
默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<packagename>/files),其他程序无法访问。
除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。

14.Lint是一个静态检查器,它围绕Android项目的正确性、安全性、性能、可用性以及可访问性进行分析。它检查的对象包括XML资源、位图、ProGuard配置文件、源文件甚至编译后的字节码。
这一版本的Lint包含了API版本检查、性能检查以及其他诸多特性。其中还有一个重要的改动是Lint可以使用@SuppressLint标注忽略指定的警告。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值