Android知识点
2017-12-01日,做Android开发已经一两年了,回首这一两年的岁月,虽然学习到很多技能点,但是大部分技能用过之后,不久就被遗忘了,为了防止自己再去踩前面踩过的坑,我决定从今天起,把自己用到的技能点做一个总结,日后能够提高自己的工作效率,同时,希望能够帮助到更多的开发者。现在只是列出了标题,后面会不断的完善。
0、开发环境
(1)Android开发工具集合:http://www.androiddevtools.cn/
小技巧:logt以当前的类名做为值自动生成一个TAG常量。
1、Activity
(1)在活动中使用Menu;
第一步:在res目录下创建一个menu文件夹;右击menu文件夹创建一个文件(例如起名为“main”);
第二步:在main文件中完成下面代码,
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add_item" android:title="Add"/> <item android:id="@+id/remove_item" android:title="Remove"/> </menu>
第三步:重现回到Activity,重写onCreateOptionsMenu()方法和onOptionsItemSelected()方法,例如下面的代码:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; }
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.add_item: Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show(); break; case R.id.remove_item: Toast.makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show(); break; default: } return true; }
销毁一个活动,finish()方法和按back键效果一样;
(2)Intent在活动之间穿梭;
a、显示Intent:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent);
b、隐式Intent:
<activity android:name=".SecondActivity" android:launchMode="singleInstance"> <intent-filter> <action android:name="com.example.activitytest.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.example.activitytest.MY_CATEGORY" /> </intent-filter> </activity>
Intent intent = new Intent("com.example.activitytest.ACTION_START");
//intent.addCategory("com.example.activitytest.MY_CATEGORY"); startActivity(intent);
只有<action>和<category>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent;每个Intent中只能指定一个action,却能指定多个category;
更多隐式Intent的用法:
c、如下调用系统浏览器打开一个网页,
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("https://www.baidu.com/")); startActivity(intent);
d、拨打电话
Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:10086")); startActivity(intent);
e、Intent向下一个活动传递数据(put和get),具体支持哪些数据类型,自己查看Android API文档;
f、返回数据给上一个活动
FirstActivity
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent,1);
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (resultCode == RESULT_OK) { String returnedData = data.getStringExtra("data_return"); Log.d("FirstActivity", returnedData); } break; default: } }
SecondActivity
Intent intent = new Intent(); intent.putExtra("data_return","Hello FristActivity"); setResult(RESULT_OK,intent); finish();
@Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); }
(3)Activity的生命周期;
保存活动被回收之前的状态:重写onSaveInstanceState()方法,然后在onCreate()恢复之前的状态;
(4)Activity的启动模式;
a、standard模式(任务栈,先进后出)
b、singleTop(顶端复用模式)
c、singleTask(单实例模式)
d、singleInstance(singleTask的增强版,会单独开启一个任务栈)
(5)