1.xml里的命名:只要是类型不同,名字就可以相同。
2.@后面的“+”:第一次创建这个id的时候,需要用到,因此自己定义的id都是需要加“+”。
3.使用“weight”的时候,width要设定成“0”,这样会提高layout的效率。
4.Intent携带数据时,“key”的名字最好是当前类的包名为前缀,且定义为“public final static”。
5.Activity的生命周期相关
(1)在onCreate()中创建了后台运行的线程,则在onDestroy()方法中,必须要销毁,否则可能会发生内存泄露。
(2)一般情况下,在调用onDestroy()的方法时,onPause()和onStop()必会调用,但是当在onCreate()方法中调用 了finish()方法的话,则是直接调用onDestroy(),不会调用其他的方法。
(3)不要在onPause()方法里做耗CPU的操作,否则会减慢跳到下个页面的速度,可以放到onStop()里做。
(4)停止动画以及希望被自动保存的东西(eg.编辑的草稿邮件)才会放到onPause()里来做。
6.屏幕密度相关
xhdpi:2.0 hdpi:1.5 mdpi: 1.0(baseline) ldpi:0.75
7.隐式跳转来调用其他应用
(1)打电话:
Uri number = Uri.parse("tel:5551234"); Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
(2)调地图:
Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z 是缩放比例 Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
(3)调本地浏览器:
Uri webpage = Uri.parse("http://www.android.com"); Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);(4)添加本地日历事件:
Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
Calendar time = Calendar.getInstance();
time.set(2016, 0, 19, 7, 30);
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, time.getTimeInMillis());
time.set(2016, 0, 19, 10, 30);
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, time.getTimeInMillis());
calendarIntent.putExtra(Events.TITLE, "Ninja class");
calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
(5)调用本地联系人
Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts")); pickContactIntent.setType(Phone.CONTENT_TYPE);
如果当前要调用的app,手机中不一定存在,则在start之前最好加上
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(callIntent, 0);
boolean isIntentSafe = activities.size() > 0;
if (isIntentSafe)
startActivity(callIntent);
如果当前有多个能响应这个跳转的app,则显示选择界面
※不加的话:标题不可改,下面有默认选择的按钮
加的话:标题可改,下面没有默认的选择按钮
Intent chooser = Intent.createChooser(intent, title);
startActivity(chooser);
8.如果在intent-filter中定义了多个data
eg.<data android:mimeType="image/*"/>
<data android:mimeType="text/plain"/>
则在接受数据时的判断
Intent intent = getIntent();
if (intent.getType().indexOf("image/") != -1) {
// Handle intents with image data ...
} else if (intent.getType().equals("text/plain")) {
// Handle intents with text ...
}