在项目中经常会用到自定义BaseActivity,主要目的就是为了方便我们去实现一些想要的功能和效果。
例如 统一管理 程序关闭、toast、log、dialog显示、findViewById、Activity跳转、Bundle、网络监听等等。
不多介绍了,直接上代码
import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.umeng.message.PushAgent; /** * @类名称: BaseActivity.java * @创建人: Mr.ladeng ([email protected]) * @创建时间: 2015-8-14下午1:37:58 * @修改备注: * @version 1.0 * @类描述: BaseActivity ,便于管理activity,toast工具类,intent跳转类 */ public abstract class BaseActivity extends Activity { private Toast toast = null; /** * 当前Activity创建时来调用(第一次启动,本Activity被销毁后再次启动,未对android: * configChanges进行设置且配置发生改变时) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PushAgent mPushAgent = PushAgent.getInstance(this); mPushAgent.enable(); PushAgent.getInstance(this).onAppStart(); // 添加Activity到堆栈 App.getInstance().addActivity(this); loadingDialog(this, "努力加载中..."); } /** 自定义dialog **/ protected Dialog dialog; /** * 自定义dialog * * @param context * @param dialogString */ protected void loadingDialog(Context context, String dialogString) { dialog = new Dialog(context, R.style.new_circle_progress); dialog.setContentView(R.layout.layout_progressbar); ((TextView) dialog.findViewById(R.id.emptyView)).setText(dialogString);// dialog显示时的字样 } /** * 简化findViewById() * * @param id * @return */ @SuppressWarnings("unchecked") protected <T extends View> T mFindViewById(int id) { // return 返回view时,加上泛型T return (T) findViewById(id); } /** * 当前Activity已onStop后(未销毁),重新再次进入后来调用 */ @Override protected void onRestart() { super.onRestart(); } /** * 在onCreate()和onRestart()之后回调 */ @Override protected void onStart() { super.onStart(); } /** * 在onStart()之后来调用 (获取到焦点,进入用户可操作界面) */ @Override protected void onResume() { super.onResume(); } /** * 当前Activity失去焦点后来调用 */ @Override protected void onPause() { super.onPause(); } /** * 当前Activity不再可见后将来调用 (在onPausse之后) */ @Override protected void onStop() { super.onStop(); } /** * 当前Activity被销毁来调用 ( android.app.Activity.finish() ) */ @Override protected void onDestroy() { super.onDestroy(); App.getInstance().removeActivity(this); } /** * 某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行, * 除非该activity是被用户主动销毁的。 * (按下HOME键?长按HOME键,选择运行其他的程序?按下电源按键?activity切换?屏幕方向切换?) * 此方法常常用来做一些应用中非持久性的存储 */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } /** * 该activity被恢复时执行(前提是该activity的确已被销毁,即此方法与onSaveInstanceState()方法不一定对等成对调用) * ,且savedInstanceState参数还会传递到onCreate()内。 此方法常常用来做一些应用中非持久性的存储的恢复。 */ @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } /** * 此方法与清单中android:configChanges对等调用(不指定,配置改变时将重调用onCreate方法,指定后, * 指定情况下将不调用onCreate方法而来调用此方法,故你懂的啦) */ @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @SuppressWarnings("deprecation") @Override public Object onRetainNonConfigurationInstance() { return super.onRetainNonConfigurationInstance(); } /** * toast 短 int * * @param pResId */ protected void showToast(int pResId) { showToast(getString(pResId)); } /** * toast 长 int * * @param pResId */ protected void showLongToast(int pResId) { showLongToast(getString(pResId)); } /** * toast 短 String * * @param pMsg */ protected void showToast(String pMsg) { if (toast == null) { initToast(); } TextView view = (TextView) toast.getView(); view.setText(pMsg); toast.setDuration(Toast.LENGTH_SHORT); toast.show(); } /** * toast 长 string * * @param pMsg */ protected void showLongToast(String pMsg) { if (toast == null) { initToast(); } TextView view = (TextView) toast.getView(); view.setText(pMsg); toast.setDuration(Toast.LENGTH_LONG); toast.show(); } @SuppressLint("ShowToast") private void initToast() { toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_SHORT); TextView textView = new TextView(getApplicationContext()); textView.setBackgroundResource(R.drawable.pop);//自定义toast背景色 textView.setPadding(15, 10, 15, 10); textView.setGravity(Gravity.CENTER); textView.setTextColor(0xffffffff); toast.setView(textView); toast.setGravity(Gravity.BOTTOM, 0, 50); } /** * Activity跳转 * * @param pClass */ protected void openActivity(Class<?> pClass) { openActivity(pClass, null); } /** * Activity跳转 * * @param pClass * @param pBundle */ protected void openActivity(Class<?> pClass, Bundle pBundle) { openActivity(pClass, pBundle, null); } /** * Activity跳转 * * @param pClass * @param pBundle * @param uri */ protected void openActivity(Class<?> pClass, Bundle pBundle, Uri uri) { Intent intent = new Intent(this, pClass); if (pBundle != null) { intent.putExtras(pBundle); } if (uri != null) { intent.setData(uri); } startActivity(intent); } /** * Activity跳转 * * @param pAction */ protected void openActivity(String pAction) { openActivity(pAction, null); } /** * Activity跳转 * * @param pAction * @param pBundle */ protected void openActivity(String pAction, Bundle pBundle) { openActivity(pAction, pBundle, null); } /** * Activity跳转 * * @param pAction * @param pBundle * @param uri */ protected void openActivity(String pAction, Bundle pBundle, Uri uri) { Intent intent = new Intent(pAction); if (pBundle != null) { intent.putExtras(pBundle); } if (uri != null) { intent.setData(uri); } startActivity(intent); } /** * intent * * @return */ protected Intent getPrevIntent() { return getIntent(); } /** * bundle * * @return */ protected Bundle getPrevExtras() { return getPrevIntent().getExtras(); } /** 关闭应用 */ public void finishDefault() { finish(); } /** * 检查当前网络是否可用 * @param context * @return */ protected boolean isNetworkAvailable(Activity activity) { Context context = activity.getApplicationContext(); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager == null) { return false; } else { NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo(); if (networkInfo != null && networkInfo.length > 0) { for (int i = 0; i < networkInfo.length; i++) { if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } } return false; } }
同时我们还需要在Application类中添加下面一段代码
<pre name="code" class="java"> import java.io.File; import java.util.Iterator; import java.util.List; import java.util.Stack; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningAppProcessInfo; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; import android.os.Environment; import android.preference.PreferenceManager; import com.baidu.mapapi.SDKInitializer; import com.easemob.EMEventListener; import com.easemob.EMNotifierEvent; import com.easemob.chat.EMChatManager; import com.easemob.chat.EMMessage; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; import com.nostra13.universalimageloader.core.download.BaseImageDownloader; import com.nostra13.universalimageloader.utils.StorageUtils; import com.umeng.message.UmengRegistrar; /** * * @类名称: App.java * @创建人: Mr.ladeng ([email protected]) * @创建时间: 2015-8-14下午1:16:16 * @修改备注: * @version 1.0 * @类描述: Application 全局类 * * * 获取屏幕信息 DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int width = metric.widthPixels; // 屏幕宽度(像素) int height = metric.heightPixels; // 屏幕高度(像素) float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5) int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240) * */ public class App extends Application { public static final String TAG = "App"; public static App application; private Stack<Activity> activityStack; public static App getInstance() { return application; } @Override public void onCreate() { super.onCreate(); application = this; } /***************************** activity管理 start **********************************/ /** add Activity 添加Activity到栈 */ public synchronized void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(activity); } /** get current Activity 获取当前Activity(栈中最后一个压入的) */ public synchronized Activity currentActivity() { Activity activity = activityStack.lastElement(); return activity; } /** 结束当前Activity(栈中最后一个压入的) */ public synchronized void finishActivity() { Activity activity = activityStack.lastElement(); finishActivity(activity); } /** 结束指定的Activity */ public synchronized void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } } public synchronized void removeActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); } } /** 结束指定类名的Activity */ public synchronized void finishActivity(Class<?> cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); return; } } } /** 结束所有Activity */ public synchronized void finishAllActivity() { for (int i = 0, size = activityStack.size(); i < size; i++) { if (null != activityStack.get(i)) { activityStack.get(i).finish(); } } activityStack.clear(); } /** 退出应用程序 */ public void AppExit() { try { finishAllActivity(); } catch (Exception e) { } } /***************************** activity管理 end **********************************/ }