1、Activity之间的跳转 并且 传递数据
A Activity进行的操作
Intent intent = new Intent(context, B.class); intent.putExtra("tn",tn); intent.putExtra("payMode",payMode); context.startActivity(intent);
B activity接收数据
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle extras = getIntent().getExtras(); tnNumber = extras.getString("tn"); payMode = extras.getString("payMode");
2、 startActivityForResult() 用法
B activity等待C activity 的结果
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_b); Intent intent = new Intent(B.this,C.class); startActivityForResult(intent,10); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); String A = data.getStringExtra("a"); String B = data.getStringExtra("b"); if(resultCode == 9){ Log.d(TAG, "onActivityResult: "+A+" "+B); } }
C activity 传递数据给 B
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_c); Intent mIntent = new Intent(); mIntent.putExtra("a","nameA"); mIntent.putExtra("b","nameB"); this.setResult(9,mIntent); }
3、 上述的应用:
场景:
接入银联支付时: 发起支付的页面必须 写一个 onActivityResult() 函数,接收支付的结果。 现在不想在 发起支付的页面 重写这个函数,而是要把它集成到SDK中,
我们需要做的是 设置一个中间 Activity去 发起支付。 A ------ C
现在问题来了: 1、设置一个中间Activity 会有跳转的效果,用户会莫名的跳进一个 空白的 activity 再跳到支付页面。
2、返回时会,需要按两次返回才能 返回原界面。
解决办法:
发起 页面A , 中间页面 B , 支付页面 C
1、B 设置注册时 设置 Activity为透明,这样跳转时就不会有闪屏的感觉。
Android:theme="@android:style/Theme.Translucent"
2、 在onActivityResult() 中完成相应操作时,调用 finish();
就不需要再按一次 返回,才能退出中间Activity
问题完美解决。
另一思路,证明是错误的。
在 B 中 发起完成 支付后 ,直接调用 finish(); 这样跳转页面时不用跳到空白页,而且从支付页面返回时也不需要调用两次。
但是 B中的onActivityResult() 方法就不会被调用。
4、Activity 中finish() 和 onDestroy()方法的区别:
Activity.finish()
Call this when your activity is done and should be closed.
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。当你调用此方法的时候,系统只是将最上面的Activity移出了栈,
并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个ActivityActivity.
onDestory()
the system is temporarily destroying this instance of the activity to save space.
系统销毁了这个Activity的实例在内存中占据的空间。在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。
当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。?
5、通过定义一个ActivityCollecter 类来管理 开启的活动
package com.example.activitytest; import android.app.Activity; import java.util.ArrayList; import java.util.List; public class ActivityCollector { public static List<Activity> activities = new ArrayList<>(); public static void addActivity(Activity activity) { activities.add(activity); } public static void removeActivity(Activity activity) { activities.remove(activity); } public static void finishAll() { for (Activity activity : activities) { if (!activity.isFinishing()) { activity.finish(); } } } }
在每个Activity 创建的时候增加:
ActivityCollector.addActivity(this);
当在最后一个Activity中调用如下,activity会被清空
ActivityCollector.finishAll(); android.os.Process.killProcess(android.os.Process.myPid());
活动生命周期:
http://www.cnblogs.com/NeilZhang/p/6898140.html
github 地址:
[email protected]:lsfzlj/AndroidTestProject.git