关闭

Activity,Intent相关知识

58人阅读 评论(0) 收藏 举报
分类:

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);
    }

startActivityForResult()

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15470次
    • 积分:749
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:6篇
    • 译文:0篇
    • 评论:0条
    文章分类