页面跳转
Intent intent = new Intent(当前页面对象,目标页面对象);
startActivity(intent);
-
MainActivity => Main2Activity ,并传递参数id
String id = "101"; Intent intent = new Intent(MainActivity.this,Main2Activity.class); intent.putExtra("id",id); startActivity(intent);
-
在Main2Activity页面接收参数id
Intent intent1 = this.getIntent(); String id = intent1.getStringExtra("id");
安卓四大组件
-
Activity
Activity为可视化用户界面,使用户和安卓程序可以交互
- 一个Activity通常就是一个单独的屏幕(窗口)。
- Activity之间通过Intent进行通信。
- android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity
-
Service
Service是android系统中的一种组件,跟activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。
Service可以理解为没有界面的Activity
- 后台播放音乐
- 后台下载文件
-
Broadcast Receiver(广播)
广播接收者,不执行任何任务,广播是一种广泛运用的在应用程序之间传输信息的机制 。 而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件。Broadcast Receiver 不包含任何用户界面。然而它们可以启动一个Activity以响应接受到的信息,或者通过NotificationManager通知 用户。
- 当手机接收短信时,安卓系统会发送广播,安卓程序通过接收广播可以获取短信的信息
-
Content Provider(内容提供者)
在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。Android当然不会真的把每一个应用都做成一座“孤岛”,它为所有应用都准备可一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生Content Provider类,封装成一枚Content Provider。每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。所有应用看着像REST的样子,但实际上它比REST更为灵活。和REST类似,uri也可以有两种类型,一种是带id的;另一种是列表的,但实现者不需要按照这个模式来做,给id的uri也可以返回列表类型的数据
安卓项目文件目录结构
- src:存放java源代码
- gen: 保存自动生成的位于Android项目包下的R.java文件。在项目中添加的任何资源都会生成一个相应的资源id,这个文件不要手动修改。
- bin:存放自动生成的二进制文件、资源打包文件以及项目执行后生成的apk包(.apk文件)** **
- res:在项目中用到的所有图片、布局、字符串资源都要存放在这个目录下,gen目录下的R.java文件中的内容也是根据这个目录下的文件自动生成的。布局xml文件命名注意事项——不能包含任何大写字母
- drawable:存放图片(命名规范:不能有中文,必须以小写字母开头)
- layout:存放activity 页面UI布局
- AndroidManifest:整个安卓项目的配置文件,程序中定义的所有四大组件都需要在这个文件里注册。
安卓生命周期
- onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问,初始化信息。
- onStart(): Activity变为在屏幕上对用户可见时调用。
- onResume(): Activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用。
- onPause(): Activity被暂停或收回cpu和其他资源时调用,该方法用户保护活动状态的,也是保护现场。Activity从可见状态变为半透明遮盖状态
- onStop(): Activity被停止并转为不可见阶段及后续的生命周期事件时调用,界面被全部遮盖。
- onRestart(): Activity被重新启动时调用。该活动仍然在栈中,而不是启动新的Activity。
- onDestroy:应用退出时被调用的最后一个方法,销毁,释放资源。
Activity注册
在AndroidManifest.xml文件中注册Activity,未注册的Activity将不能正常使用
<manifest
<application
<activity android:name=".MainActivity" >
<!--设置主启动页-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--普通activity声明-->
<activity android:name=".Main2Activity"></activity>
</application>
</manifest>
安卓服务基本使用
-
创建服务类基础Service类
class MyService : Service() { private val TAG = "MyService" override fun onBind(intent: Intent): IBinder { Log.v(TAG,"初始化服务1") return null!! } override fun onCreate() { super.onCreate() Log.v(TAG,"创建服务") } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { Log.v(TAG,"开始服务") return super.onStartCommand(intent, flags, startId) } override fun onDestroy() { super.onDestroy() Log.v(TAG,"销毁服务") } }
-
开启服务
startService(new Intent(MainActivity.this, MyService.class));
-
关闭服务
stopService(new Intent(MainActivity.this, MyService.class));
安卓广播基本使用
-
静态注册
<receiver android:name=".MyBroadcastReceiver" > <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver >
广播接收实现代码
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 广播处理部分 } }
发送自定义广播
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST"); sendBroadcast(intent);
-
动态注册广播
//动态接受网络变化的广播接收器 intentFilter = new IntentFilter(); intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); myBroadcastReceiver = new MyBroadcastReceiver(); registerReceiver(myBroadcastReceiver, intentFilter);
安卓数据库帮助类
class SqlHelper(context: Context?, name: String?, factory: SQLiteDatabase.CursorFactory?, version: Int) : SQLiteOpenHelper(context, name, factory, version) {
override fun onCreate(db: SQLiteDatabase?) {
// 数据库初始化部分,完成数据库的创建
val sql = "create table if not exists userInfo (id integer primary key autoincrement ,pwd varchar(20),sex varchar(2));"
db?.execSQL(sql)
//db?.close()
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
// 数据库升级部分,对数据库版本升级
}
val TAG = "SqlHelper"
}
Android SharedPreference 数据存储
-
存储
//获取SharedPreferences SharedPreferences sharedPref = getSharedPreferences("LightTest", MODE_PRIVATE); //打开SharedPreferences的编辑状态 SharedPreferences.Editor editor = sharedPref.edit(); //存储数据,用户名,键值对的形式 editor.putString(Name, dataStr); //提交,保存数据 editor.commit();
-
读取
//获取SharedPreferences SharedPreferences sharedPref = getSharedPreferences("LightTest", Context.MODE_PRIVATE); //获取LightTest文件中Name对应的数据; // 注意第二个参数,若此键值对中暂时没有数值,则默认返回第二个参数的值 String name = sharedPref.getString(Name, null);