startActivity的流程图 在Activity启动的时候,所处的Task以及Stack都与进程无关。...即,Task与Stack与进程不是绑定在一起的 启动流程 Activity.startActivity(用户进程) startActivity会调用startActivitiyForResult,只是...ActivityStater.startActivity(System_Server进程) startActivityLocked会直接调用startActivity: 找到调用者进程 根据token找到调用者的...= null, mSupervisor, container, options, sourceRecord); // 调用startActivity...return startActivity(r, sourceRecord, voiceSession, voiceInteractor, startFlags, true,
06-28 11:24:40.359: E/AndroidRuntime(7397): at android.app.ContextImpl.startActivity(ContextImpl.java...:617) 06-28 11:24:40.359: E/AndroidRuntime(7397): at android.content.ContextWrapper.startActivity...方法,Activity继承自Context,重载了startActivity方法。...如果使用 Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context...的startActivity方法。
Intent(view.getContext(), BlogDetail.class); intent.putExtra(“blog_id”, blog.getId()); view.getContext().startActivity...(intent); 运行时却曝出如下错误: Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside...原因:Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。...如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context...的startActivity方法。
在非Activity中使用startActivity:Calling startActivity() from outside of an Activity context requires the...= intent.resolveActivity(pm)) { context.startActivity(intent); }...错误提示信息: Caused by: Android.util.AndroidRuntimeException: Calling startActivity() from outside of an...原因分析 activity继承了context重载了startActivity方法,如果使用acitvity中的startActivity,不会有任何限制。...而如果直接使用context的startActivity则会报上面的错误,根据错误提示信息,可以得知,如果要使用这种方式需要打开新的TASK。
前言:在前两篇文章中分别介绍了动态代理、反射机制和Hook机制,如果对这些还不太了解的童鞋建议先去参考一下前两篇文章。...对此有不明白的童鞋建议再看一遍上一篇博文《小白也能看懂插件化DroidPlugin原理(二)-- 反射机制和Hook入门》。...带着这个目标我们很轻松就在 Activity 源码的 attach() 方法中找到如下代码: Activity.attach() 的源码如下(注意第8行和第26行): 1 final void...三、小结 本篇文章通过拦截 Context.startActivity() 和 Activity.startActivity() 两个方法,将上一篇文章中介绍的 Hook 技术实践 Activity...参考文章 《Android插件化原理解析——Hook机制之动态代理》 《Android应用程序的Activity启动过程简要介绍和学习计划》
AndroidManifest检测: 瞒天过海:使用代理Activity替换原来的Activity 拿到ActivityManagerNative里面的IActivityManager对象动态代理拦截startActivity...ActivityThread里面的IPackageManager,然后动态代理拦截getActivityInfo()函数的ComponentName替换为代理Activity的ComponentName startActivity
Hook Context.startActivity和Activity.startActivity Context的startActivity其实具体是由ContextImpl去实现的,首先来看下framework...的相关源码ContextImpl: @Override public void startActivity(Intent intent) { warnIfCallingFromSystemProcess...(); startActivity(intent, null); } @Override public void startActivity(Intent intent...getLaunchTaskId() == -1) { throw new AndroidRuntimeException( "Calling startActivity...之前做一些事情,然后在startActivity之后再做一些事情其实可以hook startActivity 里面的execStartActivity这个点,因为一个APP进程只对应一个ActivityThread
Android Q 中针对启动 Activity 的限制,更多的也是为了增加用户体验和安全性。...从 Beta2 开始,此限制是默认开启的,可以通过开发者选项 → 『允许后台活动启动』选项来控制其功能的开启和关闭。 四.
Android Q 针对启动 Activity 的限制,更多的也是为了增加用户体验和安全性。...从 Beta2 开始,此限制是默认开启的,可以通过开发者选项 → 『允许后台活动启动』选项来控制其功能的开启和关闭。 四.
很多人使用startActivity时候,会碰到如下的异常: Caused by: android.util.AndroidRuntimeException: Calling startActivity...都知道,Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。...如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context...的startActivity方法。
Activity Manager使用Instrumentation框架来启动和控制TestRunner,这个TestRunner反过来又使用Intrumentation来关闭任何主程序的实例,然后启动测试程序及主程序...Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。...它能触发一次setup()和tearDown(),而不是每个方法调用时都触发。如果你的测试方法都是针对同一个Activity的话,那就使用它吧。...ActivityUnitTestCase 对单个Activity进行单一测试的类。使用它,你可以注入模拟的Context或Application,或者两者。它用于对Activity进行单元测试。...这个类控制应用程序处于测试环境中,在同一个进程中运行测试程序和主程序,并且将测试结果输出到合适的地方。
R.color.colorPrimary) .go(new CircularAnim.OnAnimationEndListener() { @Override public void onAnimationEnd() { startActivity...} final long finalDuration = mDurationMills; // 由于thisActivity.startActivity
一、startActivity的过程 1.1 发起startActivity请求 当应用程序调用startActivity方法时,会将请求传递给ActivityManagerService(AMS)。...AMS是一个系统级服务,负责管理应用程序的生命周期、任务栈和进程。具体的调用过程为:首先,在应用程序中调用Context.startActivity(Intent)方法,传入一个Intent对象。...然后,ContextImpl.startActivity()方法会将请求传递给Instrumentation.startActivity()。...1.2 处理startActivity请求 AMS接收到startActivity请求后,会进行一系列的检查和准备工作,包括检查调用者的权限,解析Intent,查找目标Activity的ComponentName...3.3 将ApplicationThread和ActivityThread关联起来的过程 时序图解释: 客户端(Client)调用 startActivity(intent),将请求发送给ActivityManagerService
创建一个单元测试进行 Activity单元测试 ActivityUnitTestCase 类提供了单个Activity的 隔离测试。...要创建它,你的测试类需要集成自 ActivityUnitTestCase....要独立的启动 Activity , 你需要显式的调用 startActivity() 方法,并且传入Intent参数 来启动你的目标Acitivity。...比如你可以这样实现你的测试方法: @MediumTest public void testNextActivityWasLaunchedWithIntent() { startActivity(...不同于 ActivityUnitTestCase, 在 ActivityInstrumentationTestCase2 中的测试可以和Android系统进行通讯,并可以发送键盘输入事件和UI视图点击事件
Uri uri = Uri.parse("http://www.google.com"); Intent it = new Intent(Intent.ACTION_VIEW,uri); startActivity...这种写法是跳转到对应的拨号界面 Uri uri = Uri.parse("tel:xxxxxx"); Intent it = new Intent(Intent.ACTION_DIAL, uri); startActivity...2)这种写法是直接拨打电话 Uri uri = Uri.parse("tel.xxxxxx"); Intent it =new Intent(Intent.ACTION_CALL,uri); startActivity...it); 要使用这个必须在配置文件中加入 3.发送SMS/MMS 发送短信和...; intent.putExtra(Intent.EXTRA_TEXT, msg); startActivity(Intent.createChooser(intent, "分享")); 8.跳转到应用市场
startActivity(Intent intent) { mBase.startActivity(intent); } 熟悉Android委托机制的应该知道,这个mBase...实际指向的是ContextImpl这个类,我们再来看这个类中的startActivity方法 @Override public void startActivity(Intent intent,...类型为ReceiverRestrictedContext,和Service一样,都没有重写startActivity),如果不加FLAG_ACTIVITY_NEW_TASK的话会报如下错误的原因 "Calling...现在在回到开头,FLAG_ACTIVITY_NEW_TASK从字面上来理解,意思是:把将要启动的Activity放在一个新栈中,既然是新栈,那它的taskId和启动它的Activity所在的taskId...原来这个这个属性,还有不少隐藏的信息,它的原则是:设置此状态,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈(即taskAffinity,注意同一个应用程序中的activity的亲和性一样
给移动客服10086拨打电话 Uri uri = Uri.parse("tel:10086"); Intent intent = new Intent(Intent.ACTION_DIAL, uri); startActivity...10086"); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.putExtra("sms_body", "Hello"); startActivity...f=d&saddr=39.9 116.3&daddr=31.2 121.4"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity...id=" + "com.demo.app"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); [...代码] 安装和卸载程序 Uri uri = Uri.fromParts("package", "com.demo.app", null); Intent intent = new Intent(Intent.ACTION_DELETE
- 目录 概念 显式Intent打开Activity 隐式Intent打开Activity Intent打开网页 打电话 发短信 发邮件 显示地图与路径规划 播放多媒体 拍照 使用Intent传输数据和使用...intent启动组件的方法: 组件名称 方法 Activity startActivity( ) Services startService( ) ,bindService( ) 广播 sendBroadcasts...其中最常用的是Action属性和Data属性。...Intent打开Activity //显式意图打开Activity Intent intent = new Intent(MainActivity.this,OtherActivity.class); startActivity...Bundle extras = intent.getExtras(); Bitmap bitmap = (Bitmap) extras.get("data"); ---- 使用Intent传输数据和使用
Hook技术分类 根据Hook的API语言划分,分为Hook Java和Hook Native。 Hook Java主要通过反射和代理来实现,用于在SDK开发环境中修改Java代码。...Hook Native则应用于在NDK开发环境和系统开发中修改Native代码。 根据Hook的进程划分,分为应用程序进程Hook和全局Hook。...正常的调用和返回: ? Hook的调用和返回: ? Hook的过程 Step1....寻找Hook点,原则是 静态变量或者 单例对象,尽量Hook public的对象和方法,非public不保证每个版本都一样,需要适配。 Step2....@Override public void startActivity(Intent intent) { this.startActivity(intent, null); } // Step2
领取专属 10元无门槛券
手把手带您无忧上云