android studio中Mainactivity.this和getApplicationContext有什么不同

在Android开发中,使用Android Studio时遇到在创建加载条时,使用getApplicationContext无法成功,而替换为MainActivity.this问题得到解决。getApplicationContext返回的是整个应用的上下文,生命周期与应用同步;而MainActivity.this则表示MainActivity对象,常用于内部类引用外部Activity的Context。在需要与窗口交互或创建对话框时,应使用Activity的Context,如在创建加载条场景中,使用MainActivity.this是正确的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近一直在学习安卓开发,但是网上的很多教程都是用eclipse开发的,我比较喜欢用android studio去开发,但是发现eclipse里面有很多和as是不同的

就比如最近写一个断点下载小程序,然后自己用as仿写了一个,发现怎么操作都添加不上加载条,后来甚至都代码几乎一模一样了都添加不了

后来自己研究,于是乎,把getApplicationContext换成了Mainactivity.this,在运行就立马可以执行了

那他们到底有什么不同呢?


getApplicationContext():

返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁。


Mainactivity.this():

表示MainActivity对象,一般用在内部类中指示外面的this,如果在内部类直接用this,指示的是内部类本身。因为MainActivity继承Activity,而Activity继承Context,所以它也可以用来提供Activity Contex;


那我们举个列子,然后在判断为什么使用Mainactivit

package com.example.locationtest; import android.Manifest; import android.annotation.SuppressLint; import android.content.pm.PackageManager; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import com.baidu.location.BDAbstractLocationListener; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity{ public LocationClient mlocationClient; private TextView positiontext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EdgeToEdge.enable(this); try { mlocationClient = new LocationClient(getApplicationContext()); } catch (Exception e) { throw new RuntimeException(e); } mlocationClient.registerLocationListener(new MyLocationListner()); Log.d("MapLocation", "error"); setContentView(R.layout.activity_main); positiontext = (TextView)findViewById(R.id.position_view); List<String> permissonlist = new ArrayList<>(); if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){ permissonlist.add(Manifest.permission.ACCESS_FINE_LOCATION); } if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED){ permissonlist.add(Manifest.permission.READ_PHONE_STATE); } if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){ permissonlist.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if(!permissonlist.isEmpty()){ String [] permislist=permissonlist.toArray(new String[permissonlist.size()]); ActivityCompat.requestPermissions(MainActivity.this,permislist,1); } else { requestlocation(); } } @SuppressLint("MissingSuperCall") @Override public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){ //super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode){ case 1: if(permissions.length>0){ for(int result:grantResults){ if(result!=PackageManager.PERMISSION_GRANTED){ Toast.makeText(MainActivity.this,"impermission!!",Toast.LENGTH_LONG).show(); finish(); return; } } requestlocation(); } else{ Toast.makeText(MainActivity.this,"Error!!",Toast.LENGTH_LONG).show(); finish(); } break; default: } } private void requestlocation(){ mlocationClient.start(); } public class MyLocationListner extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { StringBuffer currentposition = new StringBuffer(); currentposition.append("latitude:").append(bdLocation.getLatitude()).append("\n"); currentposition.append("longitude:").append(bdLocation.getLongitude()).append("\n"); currentposition.append("locationtype:"); if(bdLocation.getLocType()==BDLocation.TypeGpsLocation){ currentposition.append("gps"); } else if(bdLocation.getLocType()==BDLocation.TypeNetWorkLocation){ currentposition.append("network"); } positiontext.setText(currentposition); } } }代码运行,手机app直接闪退
最新发布
07-12
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值