ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:141.62KB ,
资源ID:4940083      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4940083.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(android从放弃到坚持放弃第二课下.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

android从放弃到坚持放弃第二课下.docx

1、android从放弃到坚持放弃第二课下android从放弃到坚持放弃第二课(下)写app必须掌握活动的生命周期。活动的生命周期返回栈Android每次启动的活动会覆盖在原活动之上,然后点击Back键会销毁最上层的活动。是使用Task来管理活动,一个任务就是一组存放在栈里面的活动的集合,这个栈被称为返回栈。每当我们按下这个Back或者调用finish()方法去销毁一个活动,处于栈顶的活动就会出栈。活动状态运行状态一个活动位于返回栈栈顶的时候,就是运行状态,也是系统最不愿意回收的状态的活动。暂停状态当一个活动不再处于栈顶,但还是可见时,就进入了暂停状态。如对话框。只有在内存极低的情况下,系统才会回

2、收这个活动停止状态当一个活动不处于栈顶且不可见时就进入了停止状态。系统有可能会回收。销毁状态当一个活动从返回栈中移除后就变成了销毁状态。系统回收这种状态的活动,保证内存充足。活动的生存期Activity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节。都是从加载资源到释放资源,从而合理的管理资源。体验活动的生命周期既然是体验,我们还是重新new project吧,这次创建子活动勾选Launcher Activity,创建NormalActivity,DialogActivity.编辑activity_normal.xml:android:orientation=vertical andr

3、oid:layout_width=match_parent android:layout_height=match_parent 编辑activity_dialog.xml:android:orientation=vertical android:layout_height=match_parent android:layout_width=match_parent 从名字上可以看出,一个是normal活动,一个是dialog活动(对话框式),但是上面的代码基本一样啊。我们需要去AndroidManifest.xml中修改: 我们给它增加了android:theme的属性。现在去activit

4、y_main.xml中去增加button: 最后修改MainActivity中的代码:public class MainActivity extends AppCompatActivity private static final String TAG = MainActivity; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button startNormalAct

5、ivity = (Button) findViewById(R.id.start_normal_activity); Button startDialogActivity = (Button) findViewById(R.id.start_dialog_activity); startNormalActivity.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) Intent intent = new Intent(MainActivity.this, NormalActivi

6、ty.class); startActivity(intent); ); startDialogActivity.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) Intent intent = new Intent(MainActivity.this, DialogActivity.class); startActivity(intent); ); Override protected void onStart() super.onStart(); Log.d(TAG, onS

7、tart); 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, onDestory);

8、 Override protected void onRestart() super.onRestart(); Log.d(TAG, onRestart); 跑路。顺带观察一下logcat:好了,你现在已经体验了一遍完整的生命周期。我碰到了一个问题,start_dialog_activity这个button运行时除了错,原因是给dialog这个activity的theme里面的属性和DialogActivity继承的一个AppCompatActivity类不兼容,所以只要把继承的AppCompatActivity改为Activity就可以了。活动被回收怎么办?当一个活动进入到了停止状态,有可能

9、被系统回收。这样的话,返回之前的处于停止状态的活动是可以的,只不过不会执行onRestart() 方法而是执行的onCreate()方法,也就是说这种情况下,返回之前 被回收的活动是会被重新创建的。不过问题来了,这样临时的数据会丢失,不过问题不大。Activity中提供了onSaveInstanceState()回调方法,这个方法可以保证在活动被回收之前一定被调用,因此我们可以通过这个方法来保存临时数据。onSaveInstanceState()方法携带一个Bundle类型的参数,Bundle类提供了一些列方法保存数据,putString)(),putInt()等等,每个保存方法需要传入两个参

10、数,第一个参数是键,用于取值,第二个是真正要保存的数据。和Intent的差不多。MainActivity: protected void onSaveInstanceState(Bundle outState) super.onSaveInstanceState(outState); String tempData = Something i just typed; outState.putString(data_key,tempData); 保存完数据,但是该如何取出数据呢?onCreate()方法中有一个Bundle类型的参数,就靠它MainActivity:Log.d(TAG, onCr

11、eate);if(savedInstanceState != null) String tempData = savedInstanceState.getString(data_key); Log.d(TAG,tempData);而且我们还可以将Bundle对象存放在Intent中,到了目标活动中再取出Bundle,再从Bundle中一一取出数据。活动的启动模式启动模式分为四种:standardsingleTopsingleTasksingleInstance可以在androidManifest.xml中通过给标签中指定android:launchMode属性来选择。1.standard活动默

12、认的启动模式。因此,我们之前所使用过的都是standard模式。每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于standard模式下的活动,系统不会在乎这个活动是否已在返回栈中存在,每次启动都会创建该活动的一个新的实例。打开之前的ActivityTest项目。修改FirstActivity:public class FirstActivity extends AppCompatActivity private static final String Tag = FirstActivity; Override protected void onCreate(Bundle sa

13、vedInstanceState) super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout); Log.d(Tag, this.toString(); Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() Override public void on

14、Click(View v) Toast.makeText(FirstActivity.this, You click me, Toast.LENGTH_SHORT).show(); Intent intent = new Intent(FirstActivity.this , FirstActivity.class); startActivity(intent); ); Button button2 = (Button) findViewById(R.id.button_2); button2.setOnClickListener(new View.OnClickListener() Over

15、ride public void onClick(View v) String data = Hello huchi; Intent intentString = new Intent(FirstActivity.this, SecondActivity.class); intentString.putExtra(extra_data,data); /startActivity(intentString); startActivityForResult(intentString, 1); ); Button button4 = (Button) findViewById(R.id.button

16、_4); button4.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) Intent intentSecond = new Intent(com.example.wrjjrw.activitytest.ACTION_START); intentSecond.addCategory(com.example.wrjjrw.activitytest.MY_CATEGORY); intentSecond.putExtra(extra_data,error); startActivit

17、y(intentSecond); ); Button button5 = (Button) findViewById(R.id.button_5); button5.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) Intent intentToBaidu = new Intent(Intent.ACTION_VIEW); intentToBaidu.setData(Uri.parse( startActivity(intentToBaidu); ); Override publ

18、ic 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; case R.id.huchi_item: Toast.makeTex

19、t(this, I love huchi,too, Toast.LENGTH_LONG).show(); break; default: return true; Override public boolean onCreateOptionsMenu(Menu menu) getMenuInflater().inflate(R.menu.main, menu); return true; Override protected void onActivityResult(int requestCode, int resultCode, Intent data) switch (requestCo

20、de) case 1: if(resultCode = RESULT_OK) String returnedData = data.getStringExtra(data_return); Log.d(FirstActivity,returnedData); break; default: 我们看到他可以启动他自己,跑路。03-30 12:38:54.424 7273-7273/com.example.wrjjrw.activitytest D/FirstActivity: com.example.wrjjrw.activitytest.FirstActivity42900c5003-30 1

21、2:38:59.485 7273-7273/com.example.wrjjrw.activitytest D/FirstActivity: com.example.wrjjrw.activitytest.FirstActivity4293a0c8发现如果打开它自己三下,也就需要2.singleTop似乎standard不是很合理。singleTop在启动活动时如果发现返回栈的栈顶已是该活动,则认为可以直接使用它,不会再创建新的活动实例。修改AndroidManifest.xml 发现无论点多少次logcat都没有打印信息了。不过在FirstActivity并未处于栈顶时,这时再启动First

22、Activity,还是会创建新的实例的。我们发现在FirstActivity和SecondActivity两个活动中跳来跳去可以在logcat看到打印的消息。3.singleTasksingleTask模式可以解决上述问题。每次启动活动时,系统会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动上面的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。修改FirstActivity: Override protected void onRestart() super.onRestart(); Log.d(Tag, onRestart); 修改SecondA

23、ctivity,添加onDestroy():public class SecondActivity extends AppCompatActivity private static final String Tag = SecondActivity;/ Oride/ public void onBackPressed() / Intent intent = new Intent();/ intent.putExtra(data_return, back_to_firstActivity);/ setResult(RESULT_OK, intent);/ finish();/ Override

24、protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Button button3 = (Button) findViewById(R.id.button_3); button3.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) Intent intentFirst = new

25、Intent(SecondActivity.this, FirstActivity.class); startActivity(intentFirst); ); Button buttonFinishSecond = (Button) findViewById(R.id.button_finish); buttonFinishSecond.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) Intent intent = new Intent(); intent.putExtra(

26、data_return,byebye huchi); setResult(RESULT_OK, intent); finish(); ); Intent intent = getIntent(); String data = intent.getStringExtra(extra_data); Log.d(SecondActivity,data); Override protected void onDestroy() super.onDestroy(); Log.d(Tag, onDestroy); 跑路。观察logcat4.singleInstance最特殊最复杂的模式。会启动一个新的返回栈来管理这个活动(如果singleTask模式下指定了不同的taskAffinity).singleInstance 可以实现其他程序和我们的程序共享一个活动的实例。在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访这个活动,都公用同一个返回栈。实践出真

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1