Android开发学习笔记

开源汇总:http://www.colobu.com/2014/08/15/android-components-collection/

移动开发经验http://www.mobile-open.com/

尺寸:http://www.yixieshi.com/ucd/21426.html  http://www.jianshu.com/p/b94803509d01

关于Activity好的文章:http://limingnihao.iteye.com/blog/851337

1.Activity四种launchMode:standardsingleTopsingleTask singleInstance

standard执行oncreate 后面三种都会执行onNewIntent()

默认stantard每启动一次都会创建一个新的activity

singleTask 如果前面创建过该activity,就会将该activity栈前面的栈全部移除,将该activity移入栈顶,有个问题是如果启动页面中加了这个的话每单击软件图标重新进入软件时会出现一些页面问题

singleTop只判断是否在栈顶有没有创建过该activity,没有就创建新实例放到栈顶,开发到现在感觉用不到

singleInstance  单例模式

2.

如果I之前打开过的Activity,现在处于onPause或onStop 状态的话
其他应用再发送Intent的话,执行顺序为:onNewIntent->onRestart->onStart->onResume
3.BroadCast 只要action匹配就会发送,上次调试的时候硬是傻逼的把action里面的名称写错了,还一直以为是广播没有发送出去,接收广播的接受者配置不对
4.LogCat经常出现收不到消息,因为有bug,如果每次出问题就重启Eclipse那。。。 所以下载一个修复了Bug的adb.exe,我是在http://download.csdn.net/detail/xd1103121507/5275652上面下载的,我去前面一直想在谷歌问题上下载,一个小时硬是没有成功。
5.自己去打印http和smack的时候经常显示的是 16进制的unicode中文编码 ,如\u540e\u518d\u8bd5,很蛋疼,我要显示中文啊,用java的println可以直接打印出来,太麻烦了,网上找了好多资料,最终才让我找到两种转换方式,下面的正则表达式转换方法成功,上面的出错不知道什么原因
http://blog.csdn.net/lin772662623/article/details/8643443  (转换出错)
http://blog.csdn.net/hbuxzy/article/details/7209703      (转换正确)
6.发现即使用清理软件清理,服务还在运行,原来是Service中的子线程在onDestroy()的时候没有销毁停掉
7.创建SQLite数据库时总是提示 near "from": syntax error (code 1): 因为from是关键字,所以不能当成列名
8.使用broadcast的时候除了问题要考虑是否逻辑有问题,是否粗心把action给弄错了等等,自定义的广播最简单的直接添加action发送就行了,肯定能收到的,不要想的太复杂。
9.ListView的 onItemClick等事件失效 ,将item里面的父容器设置为   android:descendantFocusability="blocksDescendants" 这样不需要单独的让每一个按钮控件等失焦9android:focusable设置为false)
10.判断事件的执行顺序自己测试一下就知道了,onActivityResult比onResume先执行
11.https://github.com/Trinea/android-open-project 这上面的开源项目和效果非常不错值得学习
http://www.cnblogs.com/hawkon/p/3593709.html
12.http://a.code4app.com/  上面的示例代码可以拿来用或者学习,不需要积分
http://www.android100.org/
13.http://blog.csdn.net/banketree/article/details/7734476   Android 上百实例源码分析以及开源分析
14.学习Android 必备 实例大集合 http://blog.csdn.net/banketree/article/details/7643346
15.Android UI组件 http://blog.csdn.net/banketree/article/details/7966468
16. 

开源项目之Android 最新篇 

http://blog.csdn.net/banketree/article/details/9126491
Android开源工具库    http://www.open-open.com/lib/view/open1388479529516.html
最流行的android组件大全  http://www.open-open.com/lib/view/open1409108030307.html
17.推送平台:极光推送、百度推送、信鸽推送、友盟推送、个推推送、360推送   只用过百度推送,效果太差了
18.聊天平台:环信   是用的asmack库,xmpp协议
19.推广平台:酷传
20.分享平台:sharesdk   友盟   个人感觉shareSDK一键分享批量懒惰分享更简单,友盟分享更适合手动定制搭建平台,sharesdk分享中注意配置文件微信分享和易信分享,其中微信分享需要注册审核,key是指签名中的md5密钥,而像 百度地图等是用的shal1密钥,注意 微信分享创建应用的的key是 MD5密钥全部小写并且去掉冒号
21.测试平台:百度开放平台、腾讯开放平台
在所有的平台中 百度和友盟这两个平台功能最多,包括推送、统计、反馈等等
22.自动生成app平台,有点意思:http://www.douban.com/note/265297088/   http://www.csdn.net/article/2013-05-14/2815264-14-diy-app-builders-for-non-programmers/1
23.字符串中往往我们只要改一个值,我以前的做法是要么把字符串分段,有的时候还分成不同的textView控件,实际上可以通过 <xliff:g>这个标签来简化工作。
24.runOnUiThread这个线程是个好东西啊,以前总是用Handler,麻烦,提示信息用下面的方法
Toast mToast;   mToast = Toast.makeText(this, "", Toast.LENGTH_LONG);
private void showTip(final String str){
runOnUiThread(new Runnable() {
@Override
public void run() {
mToast.setText(str);
mToast.show();
   }
});
}
25.字符串拆分中 要注意的是,如果使用"."、"|"、"^"等字符做分隔符时,要写成string.split("//^")的格式
26.TextView可以设置字间距,但是将textScaleX最多设置成1.5左右,不然文字会被拉伸,所以我就是在文字中间加空格,写一个将字符串分解的并文字中间加上空格这样来体现字间距的效果
27.RadioGroup在我的华为手机4.1系统中自动给RadioButton加了一个paddingLeft属性,所以为了防止变形,需要在RadioButton中添加一个paddingLeft="0dip"的属性,搞了我三个小时才发现这个问题。
28.隐藏键盘一直都很头疼,下面完全可以解决,在其它部分触摸的时候和退出activity时就调用方法将键盘隐藏掉
protected void hideKeyboard() {
if (getCurrentFocus() != null)
keyboardmanager.hideSoftInputFromWindow(getCurrentFocus()
.getWindowToken(), 0);
}
29.多媒体时调节音量有时候找不到原因为什么弹不出音量调节界面  setVolumeControlStream(AudioManager.STREAM_MUSIC);
AudioManager mAudioManager = (AudioManager) this
.getSystemService(Context.AUDIO_SERVICE);
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		 if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
			mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
					AudioManager.ADJUST_RAISE,
					AudioManager.FX_FOCUS_NAVIGATION_UP);
		} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
			mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
					AudioManager.ADJUST_LOWER,
					AudioManager.FX_FOCUS_NAVIGATION_UP);
		}
		return true;
	}
30.使用Adapter要注意的问题
1)如果有headview和footview,记得他们也是占onItemClickLisener中position的位置的
addHeaderview和addFooterview要在setAdapter之前,否则显示不出来
2)经常获取数据的时候我们会在异步线程中,那么调用adapter.refresh()的时候就要注意判断程序是不是已经onPause()了,感觉很麻烦,虽然错误概率不高,用户多了以后发现错误列表中一大堆这样的错误,为了简单起见,在异步线程中adapter.refresh()就加个try...catch算了,如果还需要在onResume中再来个adapter.refresh().
31. https://github.com/inferjay/AndroidDevTools   这个上面集合了android开发从开发工具到编译到反编译的所有工具
32. CrossApp是一个免费的跨平台开发原生态App,编程语言为C++,可以学习一下  http://www.9miao.com/thread-56278-1-1.html  http://blog.csdn.net/qq446569365/article/details/39119689
33.有时候想主动触发按钮的事件,   ((ImageButton)v).performClick();    
34.webview在onPageFinished中得到getContentHeight()一直=0,在Handler.postDelay中就正确了
实际高度=webview.getContentHeight*webview.getScale()
35.将一张图片分割
bitmap = Bitmap.createBitmap(bitmap, xValue, yValue,  
                        pieceWidth, pieceHeight);  
36.在listview或者gridview中想要得到adapter中item的点击位置
	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		switch (ev.getAction()) {
		case MotionEvent.ACTION_DOWN:
			mDownX = (int) ev.getX();
			mDownY = (int) ev.getY();

			// 根据按下的X,Y坐标获取所点击item的position
			mDragPosition = pointToPosition(mDownX, mDownY);

			if (mDragPosition == AdapterView.INVALID_POSITION) {
				return super.dispatchTouchEvent(ev);
			}
   }
}
37.利用 LayoutInflate. inflate(layoutId, null )View中控件变形,详见http://jingyan.baidu.com/article/a681b0de31f4753b1943464a.html
我的解决办法是LayoutInflater.from(getContext()).inflate(R.layout.view, this, false);

38.根据position得到listview的view
public View getViewByPosition(int pos, ListView listView) {
  final int firstListItemPosition = listView.getFirstVisiblePosition();
  final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

  if (pos < firstListItemPosition || pos > lastListItemPosition ) {
      return listView.getAdapter().getView(pos, null, listView);
  } else {
      final int childIndex = pos - firstListItemPosition;
      return listView.getChildAt(childIndex);
  }
}
39.onActivityResult执行不正常
Activity a启动Activity b,如果给b设置了lauhchMode,不是standard,那么结果会是这样先执行Activity a的onActivityResult再执行Activity a的 onResume,finish掉Activity b以后只会执行到Activity a的onResume。原因分析,在其它模式下Activity b实际上并没有被销毁掉。

40.scrollview嵌套listview

scrollview里面嵌套了一个listview ,通过设置一个方法设置了listview的高度 现在的情况就是进到这个界面的时候看到的不是最上面 而是中间 ,该问题的解决办法为:

mScrollView.smoothScrollTo(0,20);

如此以上代码还是无效, 在代码里去掉listview的焦点 lv.setFocusable(false),再试下就可以了;


41.dialog圆角 ,按照setView(view) show()无论怎么配置,圆角背景总有4个棱角很丑
有人说用 getWindow().setBackgroundDrawable(new BitmapDrawable());  或者 getWindow().setBackgroundDrawableResource(android.R.color.transparent);  我试了不起作用;
另外有人说,自定义dialog继承自dialog这样就不会出现了
最终我是直接dialog.show();setContentView(view)这样就没有棱角了
42. 在不同APP之间通信使用Messager的使用注意事项:bundle传递parceble对象会说找不到类,在取bundle的数据前,先调用bundle.setClassLoader(getClass().getClassLoader());不能往message.obj中存放字符串等非parcebale数据,可以通过bundle来传递数据;在5.0系统以后必须要显示的启动服务。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio是Google推出的Android应用程序开发工具,它集成了开发、调试、打包等功能。要学习使用Android Studio,需要了解以下几个方面的知识: 1. Java基础: Android开发是基于Java语言的,所以要学习Android Studio首先要掌握Java基础知识。 2. Android基础: 了解Android操作系统的基本构架和常用组件,如Activity、Service、BroadcastReceiver等。 3. Android Studio使用: 了解Android Studio的基本界面和常用功能,如创建工程、编写代码、调试程序等。 4. Android SDK: 了解Android SDK的安装和配置,以及如何使用SDK Manager来下载SDK并配置项目。 5. 练习实践: 多练习实际项目,熟悉Android Studio的使用,并不断练习和完善自己的技能。 ### 回答2: Android Studio 是一个为 Android开发的整体开发环境。它基于 IntelliJ IDEA ,强调速度和智能操作,并致力于为应用程序开发提供高效率的开发工具。Android Studio 的推出,使得 Android 开发者更加容易地创建高质量的应用程序。 首先,要学 Android Studio ,你需要首先了解一些基本知识。学习 Android Studio 的工具包括 Gradle 、 Kotlin 和 Java 等。通过学习这些基础知识,你可以了解不同的语言、工具和框架。 在学习 Android Studio 时要使用实战性的方法。也就是说,每次学习新的东西时,你需要找到一个相关的例子。这样可以帮助你更好地理解它。如果你使用 Android Studio 模板,这将非常有用。这些模板可以帮助你创建常见的应用程序结构,并且你可以基于这些模板创建自己的应用程序。 另外,还有很多不同的工具和插件可以帮助你学习 Android Studio 。例如, Android Studio 网站上有很多有用的文章和教程,可以帮助你更好地理解 Android Studio 。还有很多在线工具可以帮助你实现特定的功能,在初学者阶段,这些工具可以为学习的难度减轻很多。 总之,学习 Android Studio 任重而道远。需要有耐心和时间,还需要不断地尝试和实践。在这个过程中,你可以尝试教学资料、交流学习合作、进一步增强你的知识水平。通过不断的应用和实践,一定可以成为一名优秀的 Android 开发者并圆满地完成应用开发。 ### 回答3: 作为一个应用开发者,学习使用安卓应用程序开发套件非常重要。Android Studio是Google出品的最新安卓开发工具,它具有多种强大的工具和功能,可以极大地提高应用程序的开发效率和质量。在学习过程中,个人对Android Studio的理解主要体现在以下几个方面。 首先,要开始使用Android Studio,需要了解它的基本结构和工具。Android Studio主要由三个主要组件组成:IDE、SDK、和Emulator。IDE是开发者使用的主要工具。它提供了编写、测试和调试代码所需的所有基本功能,包括视觉化设计器,代码编辑器和调试工具。SDK是开发应用程序所需的软件开发包。它包括实用程序和库,可用于在应用程序中实现预定功能。Emulator是一个虚拟的安卓设备,可以用来在开发应用程序时模拟真实设备上的应用程序运行情况。 其次,一些基本的编程知识也必不可少,例如Java编程、XML语言、UI界面设计等。Java是Android Studio中最常用的编程语言,用于编写应用程序的逻辑代码;XML语言则用于设计UI界面。在学习这些基本知识时,建议首先了解Java语言特性和面向对象编程理念,熟悉它们的基本语法和数据类型。同时,也可以通过在线教程和网课等方式加强对UI设计和布局的理解。 最后,学会使用网上的资源和社区的帮助非常重要。Android Studio的开发者社区很大,有很多在线资源可以帮助开发者的开发学习,例如stack overflow、CSDN社区等。同时,Google官方的开发者网站也提供了大量的文档资料、教程、API使用说明等。 总之,Android Studio的学习需要进行持续不断的针对不同方面的学习和实践。要充分运用Android Studio的强大功能,建议在掌握基础知识的基础上,多做实际的项目练习,不断提高自己的技术水平和代码能力,才能成为一名优秀的安卓应用程序开发者。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值