Slide 1

Slide 1 text

+ShintaroKatafuchi ProcessPhoenix

Slide 2

Slide 2 text

• +ShintaroKatafuchi • @hotchemi • Recruit Technologies Co.,Ltd. • PermissionsDispatcher, Android-Rate…

Slide 3

Slide 3 text

Environment variants

Slide 4

Slide 4 text

Dev1 Dev2 Dev4 Dev3 Dev5 Dev6 Web API

Slide 5

Slide 5 text

buildTypes  {
        debug  {
                minifyEnabled  true
        }
 }   productFlavors  {
        dev1  {
                buildConfigField  "String",  "ENVIRONEMNT_NAME",  "\"dev1\""
        }
        dev2  {
                buildConfigField  "String",  "ENVIRONEMNT_NAME",  "\"dev2\""
        }
        dev3  {
                buildConfigField  "String",  "ENVIRONEMNT_NAME",  "\"dev3\""
        }
        dev4  {
                buildConfigField  "String",  "ENVIRONEMNT_NAME",  "\"dev4\""
        }
        dev5  {
                buildConfigField  "String",  "ENVIRONEMNT_NAME",  "\"dev5\""
        }
        dev6  {
                buildConfigField  "String",  "ENVIRONEMNT_NAME",  "\"dev6\""
        }
        dev7  {
                buildConfigField  "String",  "ENVIRONEMNT_NAME",  "\"dev7\""
        }
        product  {}
 } Build variants

Slide 6

Slide 6 text

Dev1 version please! OK, I’ll build. Dev2 version please! OK, I’ll build.

Slide 7

Slide 7 text

Just tired…

Slide 8

Slide 8 text

JakeWharton/ProcessPhoenix

Slide 9

Slide 9 text

ProcessPhoenix.triggerRebirth(this);   ProcessPhoenix.triggerRebirth(this,  nextIntent);

Slide 10

Slide 10 text

JakeWharton/u2020

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

@OnClick(R.id.restart_with_intent)  void  restartWithIntent()  {
    Intent  nextIntent  =  new  Intent(this,  MainActivity.class);
    nextIntent.putExtra(EXTRA_TEXT,  "Hello!");
    ProcessPhoenix.triggerRebirth(this,  nextIntent);
 }   u2020/src/internalDebug/java/com/jakewharton/u2020/ui/debug/DebugView.java

Slide 13

Slide 13 text

Implementation

Slide 14

Slide 14 text

public  final  class  ProcessPhoenix  extends  Activity  {
    private  static  final  String  KEY_RESTART_INTENT  =  "phoenix_restart_intent";
 
    public  static  void  triggerRebirth(Context  context)  {
        triggerRebirth(context,  getRestartIntent(context));
    }   }

Slide 15

Slide 15 text

private  static  Intent  getRestartIntent(Context  context)  {
    Intent  defaultIntent  =  new  Intent(ACTION_MAIN,  null);
    defaultIntent.addFlags(FLAG_ACTIVITY_NEW_TASK  |  FLAG_ACTIVITY_CLEAR_TASK);
    defaultIntent.addCategory(CATEGORY_DEFAULT);
 
    String  packageName  =  context.getPackageName();
    PackageManager  packageManager  =  context.getPackageManager();
    for  (ResolveInfo  resolveInfo  :  packageManager.queryIntentActivities(defaultIntent,  0))  {
        ActivityInfo  activityInfo  =  resolveInfo.activityInfo;
        if  (activityInfo.packageName.equals(packageName))  {
            defaultIntent.setComponent(new  ComponentName(packageName,  activityInfo.name));
            return  defaultIntent;
        }
    }
    throw  new  IllegalStateException("Unable  to  determine  default  activity  for  "
            +  packageName
            +  ".  Does  an  activity  specify  the  DEFAULT  category  in  its  intent  filter?");
 }

Slide 16

Slide 16 text

public  static  void  triggerRebirth(Context  context,  Intent  nextIntent)  {
    Intent  intent  =  new  Intent(context,  ProcessPhoenix.class);
    intent.addFlags(FLAG_ACTIVITY_NEW_TASK);  //  In  case  we  are  called  with  non-­‐Activity  context.
    intent.putExtra(KEY_RESTART_INTENT,  nextIntent);
    context.startActivity(intent);
    if  (context  instanceof  Activity)  {
        ((Activity)  context).finish();
    }
    Runtime.getRuntime().exit(0);  //  Kill  kill  kill!
 }

Slide 17

Slide 17 text

@Override  protected  void  onCreate(Bundle  savedInstanceState)  {
    super.onCreate(savedInstanceState);
 
    Intent  intent  =  getIntent().getParcelableExtra(KEY_RESTART_INTENT);
    startActivity(intent);
    finish();
    Runtime.getRuntime().exit(0);  //  Kill  kill  kill!
 }

Slide 18

Slide 18 text

Runtime.getRuntime().exit(0);  //  Kill  kill  kill!

Slide 19

Slide 19 text

Thx, good debugging.