探究Android活動的小技巧
1.找出當前的活動
當我們在查看別人的代碼的時候可能不能第一眼就發現首次的活動是哪一個,我們可以通過以下的方法來找出當前的主活動是哪一個:
新建一個BaseActivity類:
package com.example.activitytest; import android.os.Bundle; import android.os.PersistableBundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; public class BaseActivity extends AppCompatActivity{ private static final String TAG = "BaseActivity"; @Override protected void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG,"當前的類:"+ getClass().getSimpleName()); } }
然後讓其他的類繼承這個類這樣當我們啓動程序的時候就可以在log日誌中找出當前執行的是哪一個活動.
2.隨時隨地退出程序
新建一個ActivityController類:
package com.example.activitytest; import android.app.Activity; import java.util.ArrayList; import java.util.List; public class ActivityController { 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(); } } } }
然後修改BaseActivity類,如下:
package com.example.activitytest; import android.os.Bundle; import android.os.PersistableBundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; public class BaseActivity extends AppCompatActivity{ private static final String TAG = "BaseActivity"; @Override protected void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG,"當前的類:"+ getClass().getSimpleName()); ActivityController.addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); ActivityController.removeActivity(this); } }
修改ThirdActivity如下:
package com.example.activitytest; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; public class ThirdActivity extends BaseActivity { private static final String TAG = "ThirdActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "Third中TaskID:"+getTaskId()); setContentView(R.layout.third_layout); Intent intent = getIntent(); final String extra_data = intent.getStringExtra("extra_data"); //獲取按鈕 Button button3 = (Button) findViewById(R.id.button_3); button3.setOnClickListener(new View.OnClickListener() { //調用finishAll() public void onClick(View v) { ActivityController.finishAll(); // 殺掉當前進程的代碼,保證程序完全退出 android.os.Process.killProcess(android.os.Process.myPid()); } }); } }
3.啓動活動的最佳方法
SecondActivity添加如下代碼:
public static void actionStart(Context context ,String data1,String data2) { Intent intent = new Intent(context,SecondActivity.class); intent.putExtra("param1",data1); intent.putExtra("param2",data2); Log.d(TAG, "param1: "+data1); Log.d(TAG, "param2: "+data2); context.startActivity(intent); }
FirstActivity修改點擊事件如下代碼:
//給secondActivity返回數據 public void onClick(View v) { SecondActivity.actionStart(FirstActivity.this,"數據1","數據2"); }