葡京赌场网址Android组件系列—-Activity组件详解

【声明】

图形来源于网络

迎转载,但请保留文章原来出处→_→

文/韩大爷的广货铺

命壹号:http://www.cnblogs.com/smyhvae/

1.

文章来源:http://www.cnblogs.com/smyhvae/p/3924567.html

日前笑得极度开心之一模一样蹩脚,是接到某位小小读者的私信:您好,向您请教个问题,我死渺茫,不晓未来底路途会怎样,我当年一度16东了……

 

宣读到这边,几发牙齿就不听话地渗透了出来。

【正文】

自身的笑绝非嘲笑,没有十分资格,反而觉得亲近,毕竟看到了曾经自己之师。

注:四十分组件指的是采用组件:Activity、Service、BroadcastReceiver、ContentProvider;之前的控件指的是UI组件。

自身是确实心为其感到高兴和喜,16年份啊,多好之年!啊……

博文目录:

回顾自己16春之境地,应该是将参加中考了咔嚓,学业的牢笼使自身没法保障住青涩之早恋,大批巨底卷子每天硬在头皮做,做劳动了,就熟练地皱着眉头跟班主任讲:老师,我不明!

  • 一、Activity简介
  • 老二、Activity的状态和生命周期
  • 其三、Activity的中坚用法
  • 季、向下一个Activity传递数据
  • 五、返回数据给上一个Activity
  • 六、Activity运行时屏幕方向与显示方式
  • 七、Activity的当场封存
  • 八、Activity通过SharedPreferences保存数据

如此,就足以抱喘息的机遇,班主任老师会带来我错过走廊的某个窗口,帮自己舒缓“压力”,跟自家促膝谈心。

一、Activity简介:

自口口称是,趁他唾沫横飞的时刻,望向户外的培训及飞鸟,远方的庄,连风还是美满的。

Activity组件是四颇组件有,在采用被一个Activity可以就此来代表一个界面,
中文意思呢可以了解呢“活动”
,即一个运动始于,代表Activity组件启动;活动收尾,代表一个Activity的生命周期结束。

一如既往的招数最好不用用五次于以上,记得那约是第十六七转头的下,我还喊了名声压力特别一近乎,又想出来放风,结果日未正,恰遇临考前一样全面。

一个android应用得经过Activity来运作及启动,和J2ME
的MIDlet 一样,在android中,Activity的生命周期统一交由系统管理。与MIDlet
不同的凡安装在android 中之所有的Activity 都是一样的。

班主任老师只能温柔且抱歉地针对我说:忍在!

略知一二以下四独基本概念,将促进我们更好之刺探Activity:

2.

• Application(APP)

俺们常常说年轻是好之本钱。这是如出一辙词为数不多的真心话。

• Activity

嗬算年轻?如果套路化地总结:心态年轻就是永远年轻,多少来接触逃避和志同道合取巧的意。

• Activity栈

那就是单单由生理上说罢,很粗略,年轻是于出来的对立状态,说白了便看何人剩余时间长。

• Task

假如说我三十年度,您二十载,在切的真空理想状况下,您当比我后下车十年,这便是纠缠都绕不起之优势。

每个Application均占据独立的内存空间。需要留意的凡:Application之间虽然相互独立,但APP_1中的Activity与APP_2蒙的Activity之间可以进行通信(调用、访问等)。

我们传统上倾向被尊敬老人,当然,我呢同样,只是又,我一样尊敬年轻,尊敬谁之剩余时间长。

第二、Activity的状态与生命周期

剩余时间理论上约等于未来的可能性,手里拿在老大把老把的可能性,真是一个福之顶。

1、Activity的状态:

华语言博大精深,有只词被“年富力强”,富啊,很耳熟有没有,惹得一样森爷爷奶奶忘年兴叹。

(1)Resumed:Activity对象由运行状态。一个新Activity
启动入栈后,它在屏幕最前端,处于栈的太顶端,此时其地处可见并得以跟用户交互的激活状态。

发觉不至这种绝对优势的是,糊里乱消散过去,或是被一些莫须有的心境占据耗光,真真是惋惜了。

(2)Paused:另一个Activity位于前端,但是本Activity还可见。

本身曾经养成了每逢大考胖十斤的惯,这间的原委,除了用脑多,食欲大涨以外,还起个私人的考虑:先举行最充分的打算,这次试验不好,相当给落后同辈一步,那么为把这个时空差补上,我便得……比他们长寿个一两年。于是,要求自己更大事来,越要保全心情愉快,身体健康,多吃等同十分碗米饭,给自己于别人多养起一两年之寿。

       
Paused状态时用于:当Activity被另外一个晶莹剔透或Dialog样式的Activity覆盖时的状态。此时她还是与窗口管理器保持连续,系统继续保障其中间状态,所以它们依然可见,但它们曾失去了热点故不可与用户交互。注:一个Activity出于paused状态时,系统并无见面放资源。释放资源而的操作而依赖开发者来完成。

如此一来,压力以及焦躁的情怀啊削弱去大半,因为马上会潜移默化到自我的增寿大计,进而缩短我尽人生之剩余时间;反过来,一想起自己可以比原多生来日子,相当给当前程上起了担保,便再也少生压力以及焦虑感了。

(3)Stopped:另一个Activity位于前端,完全遮挡本Activity。

而也想成为个成功人士,我吧想变成个成功人士,您存到88年份及目标,寿终正寝,我一起踉跄,没家长扶持,没数垂青,你涉嫌一年就出头的转业,我平年举行不成为,就召开十年,只要本人能生存到99,就仍是重新好之一个。

(4)killed:Activity被网杀死回收或者没有于启动时。

人生之终于术题如此简约,真是思维都令人开心呀。

 绘制表格如下:

3.

生命周期函数

调用时机

举例

onCreate

在Activity对象被第一次创建时调用

买车

onStart

当Activity变得可见时调用

打火,启动

onResume

当Activity开始准备和用户交互时调用

踩油门,驱动汽车前进

onPause

当系统即将启动另外一个Activity之前调用

松开油门

onStop

当前Activity变得不可见时调用

熄火

onDestroy

当前Activity被销毁之前调用

车辆报废

onRestart

当一个Activity再次启动之前调用

 

意识及且掌握了极端珍奇的时光资源,接下去就怎么用之题目。

 

同等个二十基本上春秋之读者朋友及自己说:走至人生之路口,感到温馨一无所有。

 

这是啊话!二十多年度终于什么路口,明明就算还从未上路呢好吗。

 

俺们一直可以把人生想象变为一个不行赌场。三十春秋前的人口好比跟班小弟,大哥带您到赌场去展现世面,找开心。并且豪气地对准您说:随便玩,别发生压力,赢了您的,输了好不容易我的。

 

是的,年轻和不再年轻的界别之一是:年轻时犯得错,总有人为您兜底,或因时间优势帮你抹平;等不再年轻后,输赢还如记账了,玩的三六九等都得温馨买单。

 

这就是说,这个跟班小弟比较明智之做法是啊为?抓紧机会,在大哥底工本能够撑得下马的前提下,尽情去玩啊,且极好只要多品尝!骰子、牌九、麻将、21碰、港式五布置,都去试一摸索,当然,这是为感受,不可动不动就“梭哈”。

 

发出了层层底品味后,找到自己比擅长或生手感(喜欢)的要命型,多以那张桌上练习,且是刻意练习,争取各级把牌子都效仿到点手艺或心得。

 

这样一来,等大哥不再罩在小弟,输赢还要小弟自己出资,小弟也会应付自如了。

 

二十多秋,一无所有是对的,除了各自幸运儿,大多数口犹是如此。

 

学习就伸手到二十多,很多人口啊还心知肚明这二十大抵年是怎么了之,此时一模一样下卷到社会及,别人还没有说啊,你先和自己一旦,要什么?你可知打出来啊呢?

 

二十基本上春秋不是故来总结回报的,二十差不多寒暑,是为此来投资之。

 

因此前没有玩好,心生类自嫌,便放弃了少量的试玩机会,那顶及壮年,真正骑虎难下时,只见面进一步玩越心死,输的更是惨。

 

4.

 

先跟老伴打电话,父母经常关切地问:最近忙忙碌碌不忙,压力大莫生。

流动:on开头的形似是事件之法子。(引申知识:观察者的设计模式)

本身时时说非忙,压力为不杀。

2、Activity的生命周期:

即是原先,多少出接触报喜不报忧的设想在里面。

葡京赌场网址 1

在外边走得更其久,当家长还提问时,我频繁会死灰复燃得差不多:忙是产生硌吧,但,压力不老。

端详请见自己的另外一篇博客:Activity的生命周期

其一答案,则更是接近实话了。

 

自我耶越来越真心地以为:确实没什么好出压力的,人生的不明吗极为没有口中的那多。

生命周期的整体代码如下:

压力来自于什么吧?

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

    private static final String TAG = "smyhvae";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume");
    }


    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause");
    }


    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart");
    }
}

一半源于于我,自己对自己发求,这差不多半算动力,人生那么丰富,有要求,一点点失满足就吓了。

 

重复多的下压力,或者吃另一半,则多是来自于别人的“期待”,不管是思想语言上,还是客观存在的同等栽事实上的巴。

 

二老或望子成龙,或是在年纪齐吃紧,你想提前透支一些事物,好相见这卖欲望或追逐上时的步。

其三、Activity的起步模式:(面试注意)

为了追寻得还精彩的配偶,或是担心辉煌来得晚些,再寻觅伙伴会措手不及,你稍微吧会发焦虑感。

 

爱人见面指向您多少评论,你为及时卖评价中受夸奖得差不多一些,白眼少一点,也会见略压力。

Activity有季种启动模式:standard、singleTop、singleTask、singleInstance。可以以AndroidManifest.xml中activity标签的性质android:launchMode蒙装置该activity的加载模式。

口是社会关系的总额,但绝别过头给社会关系捆绑,当你迎合到位自然会吃到某些甜头,但忒看重的话语,自我就会见给其反噬。

 

卿来你的生,未来路途怎么动也尽管光发一个求:勤快一点,尽力就哼。

  • standard模式:默认的模式,以这种模式加载时,每当启动一个新的运动,必定会组织一个初的Activity实例放到返回栈(目标task)的栈顶,不管是Activity是否早已是被返回栈中;
  • singleTop模式:如果一个因为singleTop模式启动的activity的实例已经是为返回桟的桟顶,那么又起步这个Activity时,不见面创造新的实例,而是用位于栈顶的挺实例,并且会调用该实例的onNewIntent()方法将Intent对象传递至之实例中;

而父母嫌弃你眼前职务低,就带他们失去同不行电影院,现在影片初步前见面起相同段落宣传教育片,让她们听李冰冰的口舌:只要你开的从,对得从国家、人民和社会,你虽是当呢中华梦之落实报效。然后微微一笑,扭过头说:儿子还为中国梦打拼呢,给英雄一点时刻吧。

 

假使你的压力源于于他人对你的品,劝你早放下这个虚无的邪念。真正的恋人,或来老观点之伴儿,或借助得下马的交际伙伴,并无见面因您一世之高山低谷,就对而判若两人。水分太可怜之浅社交当断则断,你不要时时都吃人探望得起,腾出时间来索个安静的地方实在工作就哼,争取给家都瞧不见你,自然也就算没什么瞧不起。

注:如果盖singleTop模式启动之activity的一个实例已经存在被返回桟中,但是非以桟顶,那么她的一言一行与standard模式相同,也会创多个实例;

养父母未能够跟你过一生,朋友呢只要流水般来去,趁年轻,趁年富,多品尝,找到自己之社会风气后,专注且坚强,惟精惟一。

 

每日吃三杀碗米饭,保持身心健康的身体及来韧度的魂魄,少对人家抱怨“迷茫有压力”;多和自己说一样句子:这号还可,输赢少游说,起码能够模拟着东西。

  • singleTask模式:这种模式下,每次启动一个activity时,系统率先会见在返回栈中检查是否有拖欠活动之实例,如果有,则直采用该实例(会调用实例的onNewIntent()方法),并将这活动之上的享有活动均去掉;如果没发现即使见面创造一个初的位移实例;

End.

 


  • singleInstance模式:总是以初的职责中拉开,并且这新的任务中发出且只有马上一个实例,并为多单利用共享该栈中的该Activity实例。一旦该模式之Activity的实例存在被某某栈中,任何利用还激活该Activity时都见面用该栈中的实例。其效力相当给多只应用程序共享一个下,不管谁激活该Activity都见面进去与一个用到中。

开白等事情要叫自己的商bingo_发送简信。(注:这个不是微信号,点击蓝色字体即可)

注:也就是说被该实例启动之另activity会自动运行为其他一个职责中。当还启航该activity的实例时,会再度调用已在的天职以及实例。并且会调用这个实例的onNewIntent()方法,将Intent实例传递至该实例中。和singleTask相同,同一时刻在网被唯有会存在一个这样的Activity实例。(singleInstance即单实例)

 

流淌:前面三种模式被,每个应用程序都发出和好之回到仓库,同一个动在不同之回来仓库中入栈时,必然是开创了新的实例。而动singleInstance模式可化解之题目,在这种模式下会发出一个独门的回到栈来管理是运动,不管是呀一个应用程序来拜访这活动,都公用同一个归仓库,也就是迎刃而解了共享活动实例的题目。(此时可实现任务中的切换,而不是单独某个栈中的实例切换)

 

1、singleInstance模式详解:

singleInstance模式起字面上看于难知晓,下面通过代码举例来分析。代码如下:

(1)新建三独Activity:FirstActivity、SecondActivity、ThirdActivity。同时,将SecondActivity的开行模式设置为singleInstance。

(2)三只Activity的代码如下:

FirstActivity.java:

 1 import android.app.Activity;
 2 import android.content.Intent;
 3 import android.os.Bundle;
 4 import android.util.Log;
 5 import android.view.View;
 6 import android.widget.Button;
 7 
 8 
 9 public class FirstActivity extends Activity {
10 
11     private Button button1;
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         Log.d("--->FirstActivity", "返回栈的id是" + getTaskId());  //打印当前返回栈的id
17         setContentView(R.layout.activity_main);
18         button1 = (Button) findViewById(R.id.button1);
19         button1.setOnClickListener(new View.OnClickListener() {
20             @Override
21             public void onClick(View v) {
22                 startActivity(new Intent(FirstActivity.this, SecondActivity.class));
23 
24             }
25         });
26     }
27 
28 }

头代码中,在onCreate()方法吃打印当前返回栈的id。点击按钮,跳反至SecondActivity。

 

SecondActivity.java:

 1 import android.app.Activity;
 2 import android.content.Intent;
 3 import android.os.Bundle;
 4 import android.util.Log;
 5 import android.view.View;
 6 import android.widget.Button;
 7 
 8 
 9 public class SecondActivity extends Activity {
10 
11     private Button button2;
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         Log.d("--->SecondActivity", "返回栈的id是" + getTaskId());  //打印当前返回栈的id
17         setContentView(R.layout.activity_second);
18         button2 = (Button) findViewById(R.id.button2);
19         button2.setOnClickListener(new View.OnClickListener() {
20             @Override
21             public void onClick(View v) {
22                 startActivity(new Intent(SecondActivity.this, ThirdActivity.class));
23 
24             }
25         });
26     }
27 
28 }

 

上边代码中,在onCreate()方法吃打印当前返回栈的id。点击按钮,跳反至ThirdActivity。

ThirdActivity.java:

 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.util.Log;
 4 import android.widget.Button;
 5 
 6 
 7 public class ThirdActivity extends Activity {
 8 
 9     private Button button3;
10 
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         Log.d("--->ThirdActivity", "返回栈的id是" + getTaskId());  //打印当前返回栈的id
15         setContentView(R.layout.activity_third);
16     }
17 
18 }

 

运转程序,在FirstActivity中点击按钮上SecondActivity中,然后于SecondActivity中点击按钮进入ThirdActivity。后台打印日志如下:

葡京赌场网址 2

头日志可以见见:SecondActivity的Task
id不同让FirstActivity和ThirdActivity,这证明SecondActivity确实是存于一个独立的返栈中的,而且此返回栈中只有SecondActivity这一个挪。

接下来,我们循下Back键进行返回,你见面发觉ThirdActivity竟然直接回到到了FirstActivity,再按下Back键又会回来到SecondActivity,再按照下Back键才见面脱离程序。解释如下:

FirstActivity和ThirdActivity存放在和一个返回栈里,当在ThirdActivity中按下Back键,ThirdActivity出栈,那么FirstActivity就改成了栈顶活动展示在界面及;然后于FirstActivity界面再次以下Back键,即是时下的返回栈已经拖欠了,于是就展示了任何一个返回栈的栈顶活动,即SecondActivity。最后仍下Back键,这时,所有的返栈都已经空了,自然吧便退了先后。 

 

老三、Activity的中坚用法:

1、隐藏标题栏:

requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);  

注:第一实行代码一定要以其次推行代码之前实施。

2、在动中以Toast:

譬如点击按钮时,弹出吐司:

1          button.setOnClickListener(new OnClickListener() {            
2              @Override
3              public void onClick(View v) {
4                  Toast.makeText(MainActivity.this, "You clicked the Button",Toast.LENGTH_SHORT).show();                
5              }                
6          });

3、启动一个Activity的法门:纵然在默认启动之Activity中启动另一个Activity

核心代码如下:

Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class); 

切切实实经过要参考本人的其他一样首博客: 脚下Activity跳反到外一个Activity的事无巨细经过

 

4、隐式Intent的用法:

行使隐式Intent,我们不光可启动自己程序外的移动,还可启动其他程序的活动,这使得Android多独应用程序之间的效果共享成为了恐。比如应用程序中得出示一个网页,没有必要自己失去贯彻一个浏览器(事实上为不太可能),而是就需要条用系统的浏览器来打开这网页就实施了。

【实例】:打开指定网页。

监听器部分的中心代码如下:

1         button.setOnClickListener(new OnClickListener() {            
2             @Override
3             public void onClick(View v) {
4                 Intent intent = new Intent(Intent.ACTION_VIEW);
5                 intent.setData(Uri.parse("http://www.baidu.com"));
6                 startActivity(intent);
7             }
8         }); 

第4行代码:指定了Intent的action是
Intent.ACTION_VIEW,这是一个Android系统放的动作;

第5实施代码:通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用intent的setData()方法将这Uri对象传递进入。

详细:《android第一行代码》P48页。

一旦一旦打电话的口舌,可以采取下的代码:

                Intent intent = new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);

  

季、向下一个Activity传递数据:

差的Activity
实例可能运行于一个历程遭到,也说不定运行在不同的过程被。因此,我们要同种植专门的编制帮助我们当Activity
之间传递信息。Android 中经Intent 对象来表示同样长达消息,一个Intent
对象不仅包含有此消息的目的地,还得蕴涵消息之始末,这好于一封Email,其中不仅应包含收件地点,还可涵盖具体的情。对于一个Intent
对象,消息“目的地 ”是须的,而内容虽然是可选项。

在点的实例中经Activity.
startActivity(intent)启动另外一个Activity的上,我们于Intent类的构造器中指定了“收件人地址”。

Activity传递数据有以下简单种方法:

1、【方式一】使用Intent自带的bundle对象

传递数据,代码如下:

这里,我们以任何一样种绑定监听时之方式,即在布局文件被,对Button按钮做如下设置:

 

1     <Button
2         android:id="@+id/button1"
3         android:layout_width="wrap_content"
4         android:layout_height="wrap_content"
5         android:layout_below="@+id/textView1"
6         android:layout_marginTop="22dp"
7         android:onClick="gotoSecondActivity"
8         android:text="启动第二个Activity" /> 

头第7执代码就是咱们绑定的监听事件,点击按钮,将触发gotoSecondActivity()函数中之代码。紧接着召开下的操作。

于MainActivity中发送数据:

1     public void gotoSecondActivity(View view){
2         //创建一个意图
3         Intent intent = new Intent(MainActivity.this,SecondActivity.class);
4         
5         //第一种方式:使用Intent自带的bundle对象
6         intent.putExtra("name", "smyhvae");//方法:public Intent putExtra (String name, boolean value)         
7         startActivity(intent);
8     }

 

于SecondActivity中接收数据:

 1     protected void onCreate(Bundle savedInstanceState) {
 2         // TODO Auto-generated method stub
 3         super.onCreate(savedInstanceState);
 4         setContentView(R.layout.second);
 5         
 6         Intent intent = getIntent();
 7         String name = intent.getStringExtra("name");          
 8 
 9         
10         TextView textView = (TextView)findViewById(R.id.textView1);
11         textView.setText("name="+name);       
1112     } 

 

要么传递一个靶:

新建一个Student.java的切近公事,作为传递的目标:

 1 import java.io.Serializable;
 2 //让这个类序列化
 3 public class Student implements Serializable{
 4     int grade ;
 5     String school;
 6     String address;
 7     
 8     //将这些变量 变成字符串,方便输出
 9     @Override
10     public String toString() {
11         return "Student [grade=" + grade + ", school=" + school + ", address="
12                 + address + "]";
13     }
14     
15 }

 

在MainActivity中发送数据:

 1     public void gotoSecondActivity(View view){
 2         //创建一个意图
 3         Intent intent = new Intent(MainActivity.this,SecondActivity.class);
 4         
 5         //传递自定义类型(对象)
 6         Student student = new Student();
 7         student.grade = 2;
 8         student.school = "UESTC";
 9         student.address = "chengdu";
10         intent.putExtra("student", student);//方法:public Intent putExtra (String name, Serializable value) 
11         
12         startActivity(intent);
13     }

 

于SecondActivity中接收数据:

 1     protected void onCreate(Bundle savedInstanceState) {
 2         // TODO Auto-generated method stub
 3         super.onCreate(savedInstanceState);
 4         setContentView(R.layout.second);               
 5 
 6 
 7       Intent intent = getIntent();
 8        Student student = (Student) intent.getSerializableExtra("student");
 9         
10         TextView textView = (TextView)findViewById(R.id.textView1);
11         textView.setText(student);         
12         
13         System.out.println("SecondActivity-onCreate");
14     } 

​【工程文件】

链接:http://pan.baidu.com/s/1jGvEc6q

密码:ic6c

 

2、【方式二】创建Bundle对象来传递

由此按钮监听事件。核心代码如下:

于MainActivity中发送数据:

 1     //通过这个方法跳转到SecondActivity界面     
 2     public void gotoSecondActivity(View view){
 3         //创建一个意图
 4         Intent intent = new Intent(MainActivity.this,SecondActivity.class);
 5         
 6         //第二种传值方式:创建Bundle对象来传递
 7         Bundle bundle = new Bundle();  //创建bundle的内容
 8         bundle.putString("name", "smyhvae");//编写bundle的内容
 9         bundle.putInt("age", 22);
10         bundle.putLong("id", 20132224);
11         
12         intent.putExtra("person", bundle);//封装bundle。方法:public Intent putExtra (String name, Bundle value)     
13 
14         startActivity(intent);
15     }

 

于SecondActivity中接收数据:

 1     protected void onCreate(Bundle savedInstanceState) {
 2         // TODO Auto-generated method stub
 3         super.onCreate(savedInstanceState);
 4         setContentView(R.layout.second);
 5         
 6         //获取上一个Activity传递过来的参数
 7         Intent intent = getIntent();
 8         Bundle bundle = intent.getBundleExtra("person");
 9         String name = bundle.getString("name");
10         int age = bundle.getInt("age");
11         
12         //获取上一个Activity传递过来的参数,将接收到的数据输出到TextView当中
13         TextView textView = (TextView)findViewById(R.id.textView1);
14         textView.setText("name="+name+";"+"age="+age);         
15         
16         System.out.println("SecondActivity-onCreate");
17     }

 

【工程文件】

链接:http://pan.baidu.com/s/1ntLqzfN

密码:xzn7

 

五、返回数据给上一个Activity:

步骤如下:

  • 开行带返结果的MainActivity:

       
startActivityForResult(Intent
intent, int requestCode)

       
第二个参数为呼吁求码,用于在其后的回调中判断数的起源

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent,1);

 

  • 于SecondActivity中经putExtra放入数据,然后调用以下方法:(非常重要)

        setResult(int resultCode,
Intent
data)

         resultCode一般就行使RESULT_OK
或RESULT_CANCELED这半个价,第二单参数则将带有数据的Intent传递回去

Intent intent = new Intent();
intent.putExtra("data_return", "smyhvae");
setResult(RESULT_OK, intent);
finish();

 

  • SecondActicity被灭绝之前,会调用上MainActivity的
    onActivityResult()方法,所以若双重写是方式:

public void onActivityResult(int
requestCode, int resultCode,Intent data)

 1     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 2         switch (requestCode) {
 3         case 1:
 4             if (resultCode == RESULT_OK) {
 5                 String returnedData = data.getStringExtra("data_return");
 6                 Log.d("FirstActivity", returnedData);
 7             }
 8             break;
 9         default:
10         }
11     } 

举例略。

 

六、Activity运行时屏幕方向及显示方式

1、锁定屏幕方向:横屏/ 竖屏

Android 内置了趋势感应器的支持。Android
会根据所处的取向自动在竖屏和横屏间切换。但是有时我们的应用程序仅能够以横屏/
竖屏时运行,比如一些游戏,此时我们需要锁定该Activity
运行时之屏幕方向,<activity>节点的android:screenOrientation属性可以成功该项任务,示例代码如下:

【方法同样】在清单文件中配置:

<activity android:name=".EX01"
    android:label="@string/app_name"
    android:screenOrientation="portrait"> 
    // 值为portrait时强制为竖屏, 值为landscape时强制为横屏
</activity>

 

【方法二】通过代码实现(一般在onCreate方法被的面前),如下:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATTION_LANDSCAPE); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATTION_PORTRAIT); 

此领一个聊知识,Android模拟器中,快捷键”Ctrl+F11/F12″可以兑现转屏

 

2、全屏显示:

可以于那onCreate()方法吃补充加如下代码实现:

        //设置全屏模式
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //去除标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);

 

3、以对话框式显示Activity:

以清单文件被配备:

        <activity 
            android:name="com.example.smyh004activity02.SecondActivity"
            android:label="SecondActivity"
            android:theme="@android:style/Theme.DeviceDefault.Dialog">            
        </activity> 

专门关爱:Activity的启动模式。见《Android第一推行代码》P68页

 

七、Activity的当场封存:

次在运转时,一些设备的部署或者会见变动,如:横竖屏的切换、键盘的可用性等。这种工作如果有,Activity会重新创设。

再也创设的长河如下:

  • 在销毁之前,会调用onSaveInstanceState()去保存应用被的片段数量,保存于系统当中;
  • 接下来调用onDestroy()销毁之前的Activity;
  • 末调用
    onCreate()或onRestoreInstanceState()方法去重新创设一个Activity。

实地封存的步骤如下:

(1)在MainActivity中,调用onSaveInstanceState(),即添加如下代码就足以以临时数据保存:

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        String tempData = "Something you want to save";
        outState.putString("data_key", tempData);
        Log.i(LOG, "onSaveInstanceState..");
    }

 

(2)数据保存之后,修改MainActivity的onCreate()方法:

 1     @Override
 2     protected void onCreate(Bundle savedInstanceState) {
 3         super.onCreate(savedInstanceState);
 4         setContentView(R.layout.activity_main);
 5         Log.i(LOG, "onCreate...");
 6         //步骤2:还原当前activity的状态
 7         if (savedInstanceState != null) {
 8             String tempData = savedInstanceState.getString("data_key");
 9             Log.i(LOG, tempData);
10         }
11     }

 

整代码如下:

 1 package com.example.smyh004activity03;
 2 import android.os.Bundle;
 3 import android.app.Activity;
 4 import android.content.res.Configuration;
 5 import android.util.Log;
 6 import android.view.Menu;
 7 public class MainActivity extends Activity {
 8     private static final String LOG = "Activity";
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.activity_main);
13         Log.i(LOG, "onCreate...");
14         //步骤2:还原当前activity的状态
15         if (savedInstanceState != null) {
16             String tempData = savedInstanceState.getString("data_key");
17             Log.i(LOG, tempData);
18         }
19     }
20     // 步骤1:活动被销毁之前(如在横竖屏切换时),会触发该方法来保存activity数据
21     @Override
22     protected void onSaveInstanceState(Bundle outState) {
23         super.onSaveInstanceState(outState);
24         String tempData = "open";
25         outState.putString("data_key", tempData);
26         Log.i(LOG, "onSaveInstanceState..");
27     }
28 
29 }

 当手动旋转屏幕后,后台输出结果如下:

葡京赌场网址 3

上图的日志中,如果拿生命周期写完整一点,打印的日志如下:

葡京赌场网址 4

 

以盘屏幕时,如果未思量更创设Activity,我们可由此清单文件AndroidManifest.xml中android:configChanges来指定的一些性能不发生变化,然后通知顺序去调整用onConfiguratonChanged()方法主动去改变有安(当盘屏幕的时段)。

清单文件被,指定的常见属性有:

  • “keyboard”
    键盘发生了变动—-例如用户之所以了外部的键盘 
  • “keyboardHidden”
    键盘的可用性发生了改
  • “orientation” 屏幕方向改变
  •   “screenSize” 屏幕大小改变

安代码举例如下:

        <activity
            android:name="com.example.smyh004activity03.MainActivity"
            android:label="@string/app_name"
            android:configChanges="orientation|screenSize" >
        </activity> 

横流:符号“|”表示“并且”的意思,这行代码在事实上运用中充分广阔。

就以上头的java代码的基础之上,添加如下代码:

1     @Override
2     public void onConfigurationChanged(Configuration newConfig) {
3         super.onConfigurationChanged(newConfig);
4         Log.i(LOG, "onConfigurationChanged..");
5     }

 

末,当手动旋转屏幕后,后台输出结果如下:

葡京赌场网址 5  

可以看,onSaveInstanceState()方法并没有被调用,也就是说,旋转屏幕时,当前Activity并从未让灭绝。

 

八、Activity通过Shared
Preferences保存数据:

平凡情况下会时有发生这么的题目,我们当编制短信的又起电话从上,那么连电话定是要启动另一个Activiy,那么当前编制短信的Activity所修的音讯我们想少保留下去,等连接完电话后返回该Activity时,可以持续编辑短信。该功能要哪些去落实为?

实质上,SharedPreferences使用xml格式为Android应用提供相同栽永恒的多寡存贮方式。对于一个Android应用,它存贮在文件系统的/data/
data/your_app_package_name/shared_prefs/目录下,可以被处同一个运用被的备Activity
访问。Android
提提供了有关的API来拍卖这些多少要无欲程序员直接操作这些文件要考虑数据并的题材。

今天便用代码来兑现这职能:

第一应用SharedPreferences这个工具类: 

 1     private EditText etMsg ;
 2     private Button sendButton;
 3     private SharedPreferences sp;
 4     
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9         
10         etMsg = (EditText)findViewById(R.id.editText1);
11         sendButton = (Button)findViewById(R.id.button1);
12         
13         // 获取共享属性操作的工具(文件名,操作模式)
14         sp = This.getSharedPreferences("data", 0);
15     } 

上第14尽代码中,调用的方式是:public
SharedPreferences getSharedPreferences
(String name, int mode)

其间,第一只参数代表XML文件,如果起此文件,就见面操作是文件,如果没有此文件,就见面创是文件;第二单参数代表一如既往栽操作模式,0代表私有。

然后,我们要在onPause()方法里保存数据,之所以在onPause()方法里保存,是以以拥有可能会见被外存销毁的生命周期函数中,而onPause()方法最先执行。代码如下: 

1     //在onPause()方法中保存数据
2     @Override
3     protected void onPause() {
4         super.onPause();
5         String msg = etMsg.getText().toString();
6         Editor editor = sp.edit();
7         editor.putString("msg", msg); //执行方法:public abstract SharedPreferences.Editor putString (String key, String value) 
8         editor.commit();        
9     } 

以数据保存在msg变量中,然后用到Editor这个编辑器,给其put进去。当然,这些只是在内存中操作,如果要是反映至文件中,还要实行
commit()方法。

随着,我们而以onResume()方法中再次回升数据:(为什么要在这个艺术被尚原数,不用自基本上说) 

1     @Override
2     protected void onResume() {
3         super.onResume();
4         etMsg.setText(sp.getString("msg", ""));        
5     }

当次中率先不成开行之时光,并没保留数据,所以回来一个默认的空值。将这返回的数码放到etMsg控件中即执行了。

如今我们运行程序,是足以尽之。

如,现在编辑内容,然后去别的程序,再回到的上(就算我们管程序退出了),编辑的始末还还是存在。这个时刻,我们打开文件浏览器,发现数目是保留于data-data-android工程的文本夹-shared-prefs目录的data.xml文件中的,而且是恒久保存;所以,当在onResume()方法还原数据之后,我们还要加相同片段代码,来删掉这个文件里之始末(无法去文件本身),不然就是会见永远保存本地成为废物了。代码如下: 

1     protected void onResume() {
2         super.onResume();
3         etMsg.setText(sp.getString("msg", ""));    
4         Editor editor = sp.edit();
5         editor.clear();
6         editor.commit();
7     } 

 

总结后,最终之完全版本代码如下:

activity_main.xml文件代码: 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:gravity="top"
        android:layout_weight="1"
        android:ems="10" />
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />
</LinearLayout> 

MainActivity.java的代码如下: 

 1 package com.example.smyh001;
 2 import android.app.Activity;
 3 import android.content.SharedPreferences;
 4 import android.content.SharedPreferences.Editor;
 5 import android.os.Bundle;
 6 import android.view.Menu;
 7 import android.widget.Button;
 8 import android.widget.EditText;
 9 public class MainActivity extends Activity {
10     private EditText etMsg ;
11     private Button sendButton;
12     private SharedPreferences sp;
13     
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18         
19         etMsg = (EditText)findViewById(R.id.editText1);
20         sendButton = (Button)findViewById(R.id.button1);
21         
22         // 获取共享属性操作的工具
23         sp = getSharedPreferences("data", 0);
24     }
25     //在onPause()方法中保存数据
26     @Override
27     protected void onPause() {
28         super.onPause();
29         String msg = etMsg.getText().toString();
30         Editor editor = sp.edit();
31         editor.putString("msg", msg);//执行方法:public abstract SharedPreferences.Editor putString (String key, String value) 
32         editor.commit();        
33     }
34     
35     //在onResume()方法中还原数据
36     @Override
37     protected void onResume() {
38         super.onResume();
39         etMsg.setText(sp.getString("msg", ""));    
40         Editor editor = sp.edit();
41         editor.clear();
42         editor.commit();
43     }    
44 } 

 运行程序后,我们当编辑框输入有亲笔:

葡京赌场网址 6

脱离程序,然后导出data.xml文件,打开后显得如下:

葡京赌场网址 7

征输入的文件为封存在了data.xml文件中。当我们再度返回程序,之前输入的字会受封存在界面及,而data.xml文件被的文件则会叫清空。

 

 代码优化:

上边代码中而我们以第40行代码的末端加下面就一行代码:

        etMsg.setSelection((sp.getString("msg", "")).length());

当回到原来程序时,setSelection方法可拿输入光标移动及文本的末梢位置以便继续输入。里面的参数sp.getString(“msg”,
“”)是事先所输入的字符串。

 

到这里为止,Android的基础知识就讲完了,以后会不断完善补充的。

 

自我之民众号

 

想学习代码之外的软技能?不妨关注我之微信公众号:生命团队(id:vitateam)。

 

扫一扫,你拿发现另外一个崭新的社会风气,而立将凡相同场美丽的不测:

 

葡京赌场网址 8