Android 使用点滴积累
• android studio 使用技巧:
1,初次打开别人的项目,请del 以下文件和目录
.gradle .idea build gradle gradlew gradlew.bat
再次打开工程, AS就会自动使用本机默认的Gradle配置信息, 打开工程.
2, 或则 把能正常打开的工程里的与gradle有关的文件复制过来,再打开/导入(注意是点击目录)。gradle有关的文件(.gradle, gradle, build.gradle,gradle.properties)
3,注意追加目录的可写属性
• 导入第3方so文件
1,创建目录,在src/main目录下jniLibs( AS默认目录) ,或在app目录下创建libs ,加入对应CPU的so 文件,, 如jniLibs/armeabi-v7a/libx.so
2,修改build.gradle
sourceSets{
main {
jniLibs.srcDirs = [‘libs’] //记住:如为src/main/jniLibs,则不需要添加此参数
}
}
3,将so文件打包生成jar文件,
task nativeLibsToJar(type: Zip, description: “create a jar archive of the native libs”) {
destinationDir file("$projectDir/libs")
baseName “Native_Libs2”
extension “jar”
from fileTree(dir: “libs”, include: "**/.so")
into “lib”
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
之后make project
4, 手动生成的jar包自动解包到APK
denpendencies {
compile fileTree(dir:’libs’,include:’.jar’)
compile files(‘libs/Native_Libs2.jar’)
}
1, 消息交互
方法1:handler.senMessage() + handler.dispatchMessage()
主线程:
private static final int UPDATE_TITLE = 0; //更新标题的标志
private Handler mainHandler= new Handler()
{
public void dispatchMessage(android.os.Message msg) {
if(msg.what == UPDATE_TITLE){
String title = msg.getData().getString(“Result”);
titleView.setText(title);
}else{
//其他消息
}
};
};
子线程:
new Thread(){
@Override
public void run() {
//你的处理逻辑,这里简单睡眠一秒
this.sleep(1000);
//通知更新UI
//Message msg = new Message();
//我们可以使用构造方法来创建Message,但出于节省内存资源的考量,我们应该使用Message.obtain()从消息池中获得空消息对象
Message msg = mainHandler.obtainMessage();
msg.what = UPDATE_TITLE;
Bundle bundle = new Bundle();//消息数据实体
bundle.putString("Result", "sendMsg——Result");
msg.setData(bundle);
//mainHandler.sendMessage(msg);
//如果使用的是Message.obtain()我们可以直接
msg.sendToTarget();
}
}.start();
方法2:在子线程中使用回调接口 Runnable
new Thread(){
@Override
public void run() {
try {
//你的处理逻辑,这里简单睡眠一秒
this.sleep(1000);
//利用obtain
msg = Message.obtain(mainHandler, new Runnable() {
@Override
public void run() {
titleView.setText("sendMsg——Result");
}
});
msg.sendToTarget();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
方法3:handler.post()
new Thread(){
@Override
public void run() {
try {
//你的处理逻辑,这里简单睡眠一秒
this.sleep(1000);
mainHandler.post(new Runnable() {
@Override
public void run() {
//你的处理逻辑
titleView.setText("postRunnable——Result");
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();