Upgrade to Pro — share decks privately, control downloads, hide ads and more …

process_phoenix

@hotchemi
January 22, 2016

 process_phoenix

kyobashi.dex #02

@hotchemi

January 22, 2016
Tweet

More Decks by @hotchemi

Other Decks in Programming

Transcript

  1. 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
  2. @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
  3. 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));
    }   }
  4. 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?");
 }
  5. 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!
 }
  6. @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!
 }