Activity BrocastReceiver Service ContentProvider
Activity生命周期
onCreate()//创建 onStart()//可见 onResume()//可触摸 onPause()//不可触摸 onStop()//不可见 onDestory()//销毁 onRestart()//重新开始
finish() 方法 销毁当前activity
Activity 的构造方法必须是无参的
activity 被销毁时类不结束。activity中不要用static属性
Activity横屏竖屏
横屏会销毁activity 然后重新创建
EditText等一些可以选择的控件。 携带的数据需要本身有id才能传递
其他控件要传递值需要 (现场保护)。横屏之后屏幕数据不发生改变
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在onCreate方法中去除Bundle的值
if (savedInstanceState != null) {
CharSequence text = savedInstanceState.getCharSequence("text");
textView.setText(text);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// bundle 以map形式存储数据,存储可以被传输的值
outState.putCharSequence("text",textView.getText());
}
如果有横屏的需要的话 可以新建资源文件夹Layout,然后选择横屏展示布局。可以展示横屏竖屏不同的布局样式。
设置屏幕只能横屏或竖屏,在AndroidManifest.xml文件下 activity中设置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hasee.radiogrouptest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:screenOrientation="portrait">//此处设置
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
android:screenOrientation=”portrait” 常用的参数
portrait 竖屏
reversePortrait 反转的竖屏
sensorPortrait 重力竖屏
userPortrait 用户当前的首选方向
landscape 横屏
reverseLandscape 反转横屏
sensorLandscape 重力横屏
userLandscape
Intent
1显示意图
Intent intent = new Intent(this, OtherActivity.class);//显示启动
startActivity(intent);
2隐式意图
Intent intent = new Intent(Intent.ACTION_BATTERY_LOW); //电量低
startActivity(intent);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);//进入主activity 跳转的时候让选择启动哪个应用
startActivity(intent);
Intent intent = new Intent(Intent.ACTION_DIAL);//启动系统电话
intent.setData(Uri.parse("tel:123456"));
startActivity(intent);
自定义 intent,在Activitymanifest.xml中activiy下设置intent-filter。然后在代码中跳转
<activity android:name=".ImageActivity">
<intent-filter>//自定义intent-filter
<action android:name="com.example.hasee.sharedemo.IMAGE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Intent intent = new Intent(this, ImageActivity.class);
startActivity(intent);
从程序中跳入到另外一个程序,需要知道别的应用程序的包名和类名
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.hasee.scrollviewtext828","com.example.hasee.scrollviewtext828.Main2Activity" ));
startActivity(intent);
在service 和BrocastReceiver 启动activity 需要 Intent. … Task
对返回键进行修改 ,点击两次退出程序
@Override
public void onBackPressed() {
// super.onBackPressed(); 需要删除系统的退出方法
//三秒内双击退出应用
if ((SystemClock.uptimeMillis() - time) < 3000) {
// finishAffinity(); API 16之后才能使用,退出应用
ActivityCompat.finishAffinity(this); //v4包下 退出应用
// System.exit(0);//退出进程,系统会重启应用
// Process.killProcess(Process.myPid());//杀死进行,系统会重启应用
} else {
Toast.makeText(MainActivity.this, "再点一次退出", Toast.LENGTH_SHORT).show();
time = SystemClock.uptimeMillis();
}
}
四大组件除了Activity外其他的启动Activity
需要设置Intent的flag ,新建一个栈存放Activity 。
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
下边flag当跳回到此Activity时会清空上边的所有activity
Intent intent = new Intent(this, Main2Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Activity的模式
在ActivityManifest.xml文件中设置
standard 默认方式。
singleInstance 会新建一个栈存放Activity
singleTask 一个栈中只能有一个,想要置顶就把上边的 全清除掉
singleTop 顶部只能有一个,发现启动的Activity栈顶是自己本Activity就不启动了
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//两个结合相当于singleInstance
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent的Extra 属性
Intent intent = new Intent(this, Main2Activity.class);
intent.putExtra("text", editText.getText());
startActivity(intent);
在Main2Activity中
CharSequence text = getIntent().getCharSequenceExtra("text");
textView.setText(text);
onNewIntent
Activity在singleinstance模式下跳转到某个Activity是可能不执行onCreate方法,所以当intent携带的extra数据可能不会被调用。所以需要 方法,将数据调用。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
CharSequence text = intent.getCharSequenceExtra("text");
textView.setText(text);
}